我有一个只有一个名为“tag”的字段的表,它是一个varchar(250)
该字段定义为排序规则'latin1_spanish_ci',因为我打算用西班牙语保存单词......
问题是以下查询
select * from test where tag = 'unó'
给出了与
完全相同的结果select * from test where tag = 'uno'
也就是说,对于mysql,'uno'='unó'......和'unò','unö'......等......
这个字段有一个独特的密钥......
我尝试了其他排序规则,所有“bin”排序似乎都有效,而且latin1_general_ci也是如此......
我想知道这是否适合为数据库中的每个字段选择合适的排序规则,或者如果我在选择它时可能遇到任何问题...考虑到我计划存储西班牙语数据在那个数据库...
saludos
SAS
ps:无论如何,在西班牙语的整理口音中,口音似乎很奇怪......-
编辑:我做了几个测试,我用áÁéÉñÑ等输入数据,似乎mysql可以真正处理它们......
答案 0 :(得分:2)
您可以使用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;
因为latin1_spanish_ci
中的'o','ó'等被认为是相等的,所以如果表中包含例如'{1}},则后一语句会返回多个结果。 'uno','unó'和'unò'。
答案 1 :(得分:1)
排序规则不用于定义列中数据的语言。它用于定义不同字母或多个字母/代码点必须如何定义为相同(排序和相等)。
ci
后缀latin1_spanish_ci
表示不区分大小写。
如果您希望能够区分任何突出显示的字母和任何案例,则以语言名称命名的排序规则不合适。请使用带有_bin
后缀的排序规则。
您还可以attach a specific collation一个值来强制使用特定排序规则对列进行整理:
SELECT * FROM test WHERE tag = ('uno' COLLATE latin1_bin);
答案 2 :(得分:0)
您可以使用UTF-8排序规则来区分值。
答案 3 :(得分:0)
这是解决此问题的快速方法。
'unó'应该在数据库中另存为'un ó
'。
然后您的搜索应类似于
从数据库其中字段='un ó
'的* *
使用UNICODE HTML ENTITY是关键https://www.compart.com/en/unicode/U+00F3 ...干杯!