您指定的
name列
text CHARACTER SET utf8 COLLATE utf8_unipre_ci告诉MySQL 在匹配和排序时将
e 和 é 视为等效。这种归类和
utf8_general_ci两者使很多事情都等效。
一旦您学习了如何阅读图表,http://www.collation-
charts.org/是一个很好的资源,这很容易。
如果希望将 e 和 é 等视为不同,则必须选择其他排序规则。要找出服务器上的排序规则(假设您限于UTF-8编码):
mysql> show collation like 'utf8%';
并选择使用归类图作为参考。
还有一个特殊的排序规则
utf8_bin,其中没有对等项,它是二进制匹配项。
唯一的MySQL的Unipre排序规则我所知道的是不特定语言的
utf8_unipre_ci,
utf8_general_ci和
utf8_bin。他们很奇怪。排序规则的真正目的是使计算机像人们期望的那样进行匹配和排序。匈牙利语和土耳其语字典的条目根据不同的规则排序。指定排序规则后,您可以根据此类本地规则进行排序和匹配。
例如,丹麦人似乎认为e和é等效,但冰岛人则不这样做:
mysql> select _utf8'e' collate utf8_danish_ci -> = _utf8'é' collate utf8_danish_ci as equal;+-------+| equal |+-------+| 1 |+-------+mysql> select _utf8'e' collate utf8_icelandic_ci -> = _utf8'é' collate utf8_icelandic_ci as equal;+-------+| equal |+-------+| 0 |+-------+
另一个方便的技巧是用一堆您感兴趣的字符填充一列表(通过脚本更容易),然后MySQL可以告诉您等效项:
mysql> create table t (c char(1) character set utf8);mysql> insert into t values ('a'), ('ä'), ('á');mysql> select group_concat(c) from t group by c collate utf8_icelandic_ci;+-----------------+| group_concat(c) |+-----------------+| a || á || ä |+-----------------+mysql> select group_concat(c) from t group by c collate utf8_danish_ci;+-----------------+| group_concat(c) |+-----------------+| a,á || ä |+-----------------+mysql> select group_concat(c) from t group by c collate utf8_general_ci;+-----------------+| group_concat(c) |+-----------------+| a,ä,á|+-----------------+


