mysql 不考虑重音来验证索引键的唯一性

标签 mysql character-encoding collation unique-key

我有一个表,其中只有一个名为“tag”的字段,它是一个 varchar(250)

该字段使用排序规则“latin1_spanish_ci”定义,因为我打算用西类牙语保存单词...

问题是下面的查询

select * from test where tag = 'unó'

给我完全一样的结果

select * from test where tag = 'uno'

也就是说,对于 mysql,'uno' = 'unó'... and 'unò', and 'unö'... etc...

这个字段应该有一个唯一的键...

我尝试了其他归类,所有“bin”归类似乎都有效,而且 latin1_general_ci 也是...

我只是想知道这是否适合为数据库中的每个字段选择排序规则,或者我在选择它时是否会遇到任何问题...考虑到我打算存储西类牙数据在那个数据库中...

敬礼

SAS

ps:无论如何,在西类牙语排序规则中重音被认为是无意义的似乎真的很奇怪......

--

编辑:我做了几个测试,我用 á Á é É ñ Ñ 等输入数据,看来 mysql 真的可以处理它们......

最佳答案

您可以使用 latin1_general_ci 作为默认的数据库/表/列排序规则,并在需要时根据每个选择指定 latin1_spanish_ci:

select * from test order by tag collate latin1_spanish_ci;
select * from test where tag = 'uno' collate latin1_spanish_ci;

因为 'o'、'ó' 等在 latin1_spanish_ci 中被认为是相等的,如果表包含例如'uno'、'unó' 和 'unò'。

关于mysql 不考虑重音来验证索引键的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2010951/

相关文章:

MySql 按小时查询

java - 将 UTF-8 转换为 Shift-JIS

c++ - std::wstring_convert 和 std::wbuffer_convert 有什么区别?

mysql - 不可重复的 "Illegal mix of collations"错误

sql-server - 当我的 SQL Server 数据库设置为 Latin1_General_100_CI_AI 时出现大小写和排序规则问题

mysql - 在 Laravel Eloquent 中使用桥接表中的关系

php - 从 PHP 到 MYSQL 的复选框到数组的简单代码有什么问题?

java - MySQL POLYGON ←→ JTS Polygon with JOOQ (as WKT)

java - 我的简单 Java HTTPServer 中的特殊字符编码

sql - 如何在 SQL 2000/2005 中执行区分大小写的搜索和替换?