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

StackOverflow https://stackoverflow.com/questions/3332387

Вопрос

У меня есть таблица пользователей, в которой есть столбец под названием «Nickname», UTF-8 кодирован, Varchar (20), таблица находится в InnoDB.Там 2 записи у одного есть псевдоним= «Gunni», а другой псевдоним= «Günni».Когда я пытался применить уникальный индекс на этот столбец, MySQL дал мне эту ошибку:

Ошибка 1062 (23000) в строке 263: Дублирующая запись «Gunni» для ключа 2

Я проверил данные, есть только одна запись, имеющая имя «Gunni», и если я изменим запись «Günni» для чего-то другого, затем снова примените уникальный индекс, все работает нормально.

Как приходите «Günni '&' Gunni» дубликаты?Вот шестнадцатеричные значения для них, я получаю это с помощью функции MySQL Hex ():

Gunni -> 67756E6E69

Günni -> 67c3bc6e6e69

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

Это было полезно?

Решение

Это из-за сопоставления, которую вы используете.

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

Документы: http://dev.mysql.com/DOC / REFMAN / 5.0 / EN / CHARSET-TALLE.HTML

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top