Mysql уникальный индекс не работает на определенном умлауте
У меня есть таблица пользователей, в которой есть столбец с именем 'псевдоним', кодированный 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 ответ
Это из-за сортировки, которую вы используете.
Все, что заканчивается на _ci, нечувствительно к регистру (а также нечувствительно к акценту / умлауту). Так что да, MySQL будет считать "günni" и "gunni" одним и тем же, если вы не измените свою сортировку.
Документы: http://dev.mysql.com/doc/refman/5.0/en/charset-table.html