2016-01-26 1 views
2

J'utilise MySQL5.6. Le jeu de caractères DB est utf8mb4. Lorsque je recherche des emoji comme ci-dessous, j'ai des résultats inattendus.La recherche d'emoji à partir de la colonne varchar renvoie un enregistrement différent

mysql> SELECT id, hex(title) FROM tags WHERE title = 0xF09F9886; 
+-----+------------+ 
| id | hex(title) | 
+-----+------------+ 
| 165 | F09F9886 | 
| 166 | F09F9884 | 
+-----+------------+ 

Il ne doit renvoyer que id = 165. Est-ce que quelqu'un sait ce pourquoi?

Répondre

4

J'ai trouvé comment y remédier. C'était un problème de collation. J'ai utilisé la valeur de classement par défaut, je suppose que c'est utf8mb4_general_ci. Quand j'ai changé cette utf8mb4_bin, MySQL a renvoyé le bon résultat.

Vous pouvez modifier le classement comme ci-dessous.

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;