2010-07-26 8 views
7

J'ai une table d'utilisateurs dans laquelle il y a une colonne appelée 'pseudo', encodée en utf-8, varchar (20), la table est en InnoDB. Il y a 2 enregistrements dont l'un a un pseudo = 'gunni' et l'autre pseudo = 'günni'. Quand j'ai essayé d'appliquer un index unique sur cette colonne, MySQL m'a donné cette erreur:L'index unique de Mysql ne fonctionne pas sur un certain tréma

erreur 1062 (23000) à la ligne 263: entrée en double 'de gunni' pour la touche 2

J'ai vérifié les données il n'y a qu'un seul enregistrement qui a le nom 'gunni', et si je change l'enregistrement 'günni' en quelque chose d'autre, puis j'applique à nouveau l'index unique, tout fonctionne bien.

Comment 'günni' & 'gunni' peut-il être dupliqué? Voici les valeurs hexagonales pour eux, je reçois ce avec la fonction hex de MySQL():

gunni -> 67756E6E69

günni -> 67C3BC6E6E69

Ils sont évidemment différentes. Comment se fait-il que mysql traite ces 2 comme identiques? Ou y a-t-il quelque chose que je ne connais pas sur les index uniques? Ou même, cela pourrait-il être un bug mysql?

+0

quel moteur de stockage que vous utilisez? – Sarfraz

+0

@sAc: moteur de stockage = InnoDB – Shawn

Répondre

7

C'est à cause de la collation que vous utilisez. Tout ce qui se termine par _ci est insensible à la casse (et insensible à l'accent/tréma). Donc oui, MySQL considèrera "günni" et "gunni" la même chose, sauf si vous changez votre collation.

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

+0

utf8-bin peut éventuellement fonctionner dans mon cas? Merci. – Shawn

+0

@Shawn Il devrait. – NullUserException

+0

@Shawn Cela a-t-il fonctionné? – NullUserException