Mysql уникальный индекс не работает на определенном умлауте - PullRequest
8 голосов
/ 26 июля 2010

У меня есть таблица пользователей, в которой есть столбец с именем 'псевдоним', в кодировке utf-8, varchar (20), таблица находится в InnoDB.Есть 2 записи, одна из которых имеет псевдоним = 'gunni', а другая - псевдоним = 'günni'.Когда я попытался применить уникальный индекс к этому столбцу, mysql выдал мне эту ошибку:

ОШИБКА 1062 (23000) в строке 263: Дублирующая запись 'gunni' для ключа 2

Я проверил данные, есть только одна запись с именем gunni, и если я изменю запись 'günni' на что-то другое, тогда снова примените уникальный индекс, все работает нормально.

Почему «günni» и «gunni» дублируются?Вот шестнадцатеричные значения для них, я получаю это с помощью функции hex () mysql:

gunni -> 67756E6E69

günni -> 67C3BC6E6E69

Они явно разные.Почему MySQL рассматривает эти 2 как одно и то же?Или я что-то не знаю об уникальных индексах?Или даже, это может быть ошибка MySQL?

1 Ответ

9 голосов
/ 26 июля 2010

Это из-за используемой вами сортировки.

Все, что заканчивается на _ci, нечувствительно к регистру (а также нечувствительно к акценту / умлаут).Так что да, MySQL будет считать «günni» и «gunni» одинаково, если только вы не измените свое сопоставление.

Документы: http://dev.mysql.com/doc/refman/5.0/en/charset-table.html

...