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 № 1Dzieje 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