MySQL DISTINCT和重音

时间:2015-04-10 21:16:59

标签: mysql character-encoding collation

在Debian上运行的MySQL数据库(版本5.5.41-0 + wheezy1-log)。

hotels,列name VARCHAR(128),引擎是InnoDB。

CREATE TABLE `hotels` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT
  `name` varchar(128) NOT NULL DEFAULT '' COMMENT 'Hotel Name',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

此表中有两条记录:

1    BEST WESTERN PREMIER LE CARRE FOLIES OPERA
2    BEST WESTERN PREMIER LE CARRÉ FOLIES OPÉRA

执行select DISTINCT name FROM hotels时,查询只返回1条记录,而预计会返回2条记录。

DBMS似乎在E和É之间没有区别。

如何更改表格设置以获得预期结果?

1 个答案:

答案 0 :(得分:4)

表格排序设置为utf8_general_ci。这是MySQL服务器和架构的默认设置。

MySQL 5.5中有3个排序规则名称:

  • _ci结尾的名称表示不区分大小写的排序规则。
  • _cs结尾的名称表示区分大小写的排序规则。
  • _bin结尾的名称表示二进制排序规则。字符比较基于字符二进制代码值。

整理必须更改为utf8_bin。可以使用此查询对表和所有列执行此操作:

ALTER TABLE hotels CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
相关问题