2010-07-26 9 views
7

Ho una tabella utenti in cui è presente una colonna denominata "nickname", codificata utf-8, varchar (20), la tabella è in InnoDB. Ci sono 2 record uno ha un nickname = 'gunni' e l'altro nickname = 'günni'. Quando ho cercato di applicare un indice univoco su questa colonna, mysql mi ha dato questo errore:L'indice univoco Mysql non funziona su una certa dieresi

ERROR 1062 (23000) alla riga 263: Duplicate entry 'Gunni' per la chiave 2

ho controllato il dati c'è solo un record che ha il nome 'gunni', e se cambio il record 'günni' in qualcos'altro allora applichi di nuovo l'indice univoco, tutto funziona bene.

Come mai 'günni' & 'gunni' essere duplicati? Ecco i valori esadecimali per loro, ottengo questo con esadecimale di mysql() Funzione:

Gunni -> 67756E6E69

Günni -> 67C3BC6E6E69

Sono ovviamente diversa. Come mai mysql tratta questi 2 come lo stesso? O c'è qualcosa che non so sugli indici unici? O anche, potrebbe essere un bug mysql?

+0

quale motore di archiviazione stai utilizzando? – Sarfraz

+0

@sAc: storage engine = InnoDB – Shawn

risposta

7

È a causa delle regole di confronto utilizzate.

Tutto ciò che termina con _ci è senza distinzione tra maiuscole e minuscole (e anche accent/non accentuato). Quindi sì, MySQL considererà "günni" e "gunni" la stessa cosa, a meno che non cambi le tue regole di confronto.

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

+0

utf8-bin può funzionare nel mio caso? Grazie. – Shawn

+0

@Shawn Dovrebbe. – NullUserException

+0

@Shawn Funzionava? – NullUserException