MySQL 5中ä,ö,å等字符的问题

时间:2009-08-03 12:30:26

标签: mysql

我在Linux系统上运行MySQL 5.xx。我的应用程序正确地将ä,ö,å等字符写入数据库,甚至可以正确获取这些值。但是当我使用WHERE过滤搜索char'ä'时,它也会返回包含'a'字符的字符串。为什么MySQL认为a等于ä?

示例查询:

SELECT列FROM表WHERE字段='%ä%';

2 个答案:

答案 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日期讨论过的那样,系统将按如下方式对字符进行排序和查找......”