我在Linux系统上运行MySQL 5.xx。我的应用程序正确地将ä,ö,å等字符写入数据库,甚至可以正确获取这些值。但是当我使用WHERE过滤搜索char'ä'时,它也会返回包含'a'字符的字符串。为什么MySQL认为a等于ä?
示例查询:
SELECT列FROM表WHERE字段='%ä%';
答案 0 :(得分:7)
MySQL
使用排序规则来比较字符值。
排序规则是数据库使用的规则集,用于定义哪些字符不同,哪些字符在比较时不存在。
区分大小写的排序规则区分'QUERY'
和'query'
,不区分大小写不会。
重音敏感排序区分'résumé'
和'resume'
,不区分重音不会。
在列的默认排序规则(最有可能是UTF8_GENERAL_CI
)中,与未声明的字符无法区分:
SELECT 'a' LIKE '%ä%'
---
1
要区分它们,请使用二进制排序规则(将具有不同unicodes的所有字符视为不同的字符):
SELECT 'a' LIKE '%ä%' COLLATE UTF8_BIN
---
0
答案 1 :(得分:3)
注意:对于许多应用程序,将a和ä整理为同一个字母被视为一项功能。我的建议:务必仔细检查您的客户,以确定需要哪种行为。
我甚至可能会跟进一份备忘录,上面写着“正如我们在x日期讨论过的那样,系统将按如下方式对字符进行排序和查找......”