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

mysql在验证索引键的唯一性时不考虑重音,mysql,character-encoding,collation,unique-key,Mysql,Character Encoding,Collation,Unique Key,我有一个表,其中只有一个名为tag的字段,它是一个varchar250 该字段是用排序规则“latin1_spanish_ci”定义的,因为我计划用西班牙语保存单词 问题是下面的查询 select * from test where tag = 'unó' 给我的结果和 select * from test where tag = 'uno' 也就是说,对于mysql,'uno'='uno'。。。还有“unò”和“unö”。。。等等 支持此字段具有唯一的密钥 我尝试了其他的排序,所有的bin

我有一个表,其中只有一个名为tag的字段,它是一个varchar250

该字段是用排序规则“latin1_spanish_ci”定义的,因为我计划用西班牙语保存单词

问题是下面的查询

select * from test where tag = 'unó'
给我的结果和

select * from test where tag = 'uno'
也就是说,对于mysql,'uno'='uno'。。。还有“unò”和“unö”。。。等等

支持此字段具有唯一的密钥

我尝试了其他的排序,所有的bin排序似乎都很有效,还有拉丁语1_general_ci

我只是想知道这是否是为数据库中的每个字段选择的合适排序规则,或者我在选择它时是否会遇到任何困难。。。考虑到我计划在数据库中存储西班牙语数据

萨卢多斯

sas

无论如何,在西班牙语的校勘中,口音被认为是毫无意义的,这似乎真的很奇怪

-


编辑:我做了两次测试,输入了数据,等等,看起来mysql真的可以处理它们好了…

您可以使用UTF-8排序规则来区分值。

您可以使用latin1\u general\u ci作为默认的数据库/表/列排序规则,并根据需要指定latin1\u spanish\u 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ò”,则后一个语句将返回多个结果。

排序规则不用于定义列中数据的语言。它用于定义不同字母或多个字母/代码点必须如何定义为相同,以便进行比较排序和相等

latin1_spanish_ci的ci后缀表示不区分大小写

如果希望能够区分任何重音字母和任何大小写,则以语言名称命名的排序规则是不合适的。使用带有_bin后缀的排序规则

您还可以将值设置为强制在列的排序规则上使用特定排序规则:

SELECT * FROM test WHERE tag = ('uno' COLLATE latin1_bin);

这是解决这个问题的快速方法

“unó”应另存为“un&243;”在你的数据库上

那么你的搜索应该是

从数据库中选择*字段='un&243;'

使用UNICODE HTML实体是关键。。。干杯