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

Другие вопросы по тегам