Вы указали столбец name
как text CHARACTER SET utf8 COLLATE utf8_unicode_ci
, который говорит MySQL, что при сопоставлении и сортировке следует учитывать e и é .Это сопоставление и utf8_general_ci
делают многое эквивалентным.
http://www.collation -charts.org / - отличный ресурс, когда вы научитесь читать диаграммы, что довольнолегко.
Если вы хотите, чтобы e и é и т. д. считались различными, то вы должны выбрать другое сопоставление.Чтобы выяснить, какие параметры сортировки находятся на вашем сервере (при условии, что вы ограничены кодировкой UTF-8):
mysql> show collation like 'utf8%';
И выберите использование таблиц сопоставления в качестве справочного.
Еще один особыйСортировка utf8_bin
, в которой нет эквивалентов, это двоичное совпадение.
Единственные сопоставления MySQL Unicode, о которых я знаю, которые не зависят от языка, это utf8_unicode_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,ä,á |
+-----------------+