Уникальный индекс Mysql не работает над определенным умляутом

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

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

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

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

мешковина-> 67756E6E69

günni-> 67C3BC6E6E69

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

9
задан NullUserException 15 June 2015 в 17:35
поделиться

1 ответ

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

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

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

10
ответ дан 4 December 2019 в 21:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: