L'index unique MySQL ne fonctionne pas sur une certaine Umlaut
-
29-09-2020 - |
Question
J'ai une table d'utilisateurs dans laquelle il y a une colonne appelée "surnom", UTF-8 codé, Varchar (20), la table est en InnoDB.Il y a 2 enregistrements que l'on a un surnom= 'gunni' et l'autre surnom= 'Günni'.Lorsque j'ai essayé d'appliquer un index unique sur cette colonne, MySQL m'a donné cette erreur:
Erreur 1062 (23000) à la ligne 263: entrée en double 'gunni' pour la clé 2
J'ai vérifié les données Il n'y a qu'un seul enregistrement qui a le nom 'Gunni', et si je modifie l'enregistrement "Günni" à quelque chose d'autre, appliquez à nouveau l'index unique, tout fonctionne bien.
Comment se fait-il 'Günni' et 'Gunni' sont-ils duplicats?Voici les valeurs hexagonales pour eux, je reçois cela avec la fonction Hex () de MySQL:
gunni -> 67756E6E69
Günni -> 67C3BC6E6E69
Ils sont évidemment différents.Comment se fait-il que MySQL traite ces 2 identiques?Ou y a-t-il quelque chose que je ne connais pas d'index uniques?Ou même, pourrait-il être un bug mysql?
La solution
C'est à cause de la classement que vous utilisez.
Tout ce qui se termine avec _CI est insensible à la casse (ainsi que l'accent / umlaut insensible).Alors oui, MySQL considérera "Günni" et "Gunni" la même chose, à moins que vous ne changez de votre collation.
docs: http://dev.mysql.com/DOC / REFMAN / 5.0 / FR / CHRSTE-TABLE.HTML