L'indice unico MySQL non funziona su un certo umlaut
-
29-09-2020 - |
Domanda
Ho una tabella degli utenti in cui c'è una colonna chiamata "Nickname", UTF-8 codificata, Varchar (20), la tabella è in InnoDB.Ci sono 2 record, uno ha un soprannome= 'Gunni' e l'altro nickname= 'Günni'.Quando ho provato ad applicare un indice unico su questa colonna, MySQL mi ha dato questo errore:
.Errore 1062 (23000) alla linea 263: Duplicata Entry 'Gunni' per il tasto 2
Ho controllato i dati che c'è solo un record che ha il nome "Gunni", e se cambio il record "Günni" per qualcos'altro, quindi applica di nuovo l'indice univoco, tutto funziona bene.
Come vengono duplicati 'Günni' & 'Gunni'?Ecco i valori esagonali per loro, ottengo questo con la funzione Hex () di MySQL:
.Gunni -> 67756E6E69
Günni -> 67C3BC6E6E69
Sono ovviamente diversi.Come mai MySQL tratta questi 2 come lo stesso?O c'è qualcosa che non conosco degli indici unici?O anche, potrebbe essere un bug mysql?
Soluzione
È a causa della raccolta che stai utilizzando.
Tutto ciò che termina con _ci è insensibile al caso-insensibile (e anche Accent / Umlaut insensibile).Quindi sì, MySQL prenderà in considerazione "Günni" e "Gunni" la stessa cosa, a meno che tu non cambi la tua collazione.
Documenti: http://dev.mysql.com/DOC / REFMAN / 5.0 / IT / CHARSET-Table.html