/ / Unikalny indeks Mysql nie działa na pewnym umlaut - mysql, indexing, mysql-error-1062

Unikalny indeks Mysql nie działa na pewnym umlaut - mysql, indexing, mysql-error-1062

Mam tabelę użytkowników, w której znajduje się kolumnanazywany "pseudonimem", zakodowany utf-8, varchar (20), tabela znajduje się w InnoDB. Tam są 2 rekordy jeden ma pseudonim = "gunni", a drugi pseudonim = "günni." Kiedy próbowałem zastosować unikalny indeks na tej kolumnie, mysql dał mi ten błąd:

ERROR 1062 (23000) w wierszu 263: Zduplikowany wpis "gunni" dla klucza 2

Sprawdziłem dane tam jest tylko jeden rekord, który ma nazwę "gunni", a jeśli zmienię rekord "günni" na coś innego, to zastosuj ponownie unikalny indeks, wszystko działa dobrze.

Dlaczego duplikaty "günni" i "gunni"? Oto wartości szesnastkowe dla nich, otrzymuję to za pomocą funkcji hex () mysql:

gunni -> 67756E6E69

günni -> 67C3BC6E6E69

Są one oczywiście różne. Dlaczego mysql traktuje te 2 jako takie same? Czy jest coś, czego nie wiem o unikalnych indeksach? A może to może być bug mysql?

Odpowiedzi:

7 dla odpowiedzi № 1

Dzieje się tak z powodu sortowania, z którego korzystasz.

Wszystko, co kończy się na _ci, jest niewrażliwe na wielkość liter (a także jest niewrażliwe na akcent / umlaut). Więc tak, MySQL będzie uważał "günni" i "gunni" za to samo, chyba że zmienisz swoje sortowanie.

Dokumenty: http://dev.mysql.com/doc/refman/5.0/en/charset-table.html