【问题标题】:MySQL DISTINCT and accentsMySQL DISTINCT 和重音
【发布时间】:2015-06-16 17:27:26
【问题描述】:

在 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 和 É。

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

【问题讨论】:

    标签: mysql character-encoding collation


    【解决方案1】:

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

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

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

    排序规则必须更改为utf8_bin。可以对带有此查询的表和所有列执行此操作:

    ALTER TABLE hotels CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-28
      • 2021-10-30
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 2021-01-30
      • 2011-10-21
      相关资源
      最近更新 更多