我有一个表,其中只有一个名为“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/