从varchar列搜索表情符号会返回不同的记录

时间:2016-01-26 08:57:46

标签: mysql emoji utf8mb4

我正在使用MySQL5.6。 DB字符集是utf8mb4。 当我按下面搜索表情符号时,我得到了意想不到的结果。

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

它应该只返回id = 165。有谁知道这个为什么?

1 个答案:

答案 0 :(得分:4)

我找到了解决方法。这是整理问题。我使用默认的排序规则值,我认为它是utf8mb4_general_ci。当我更改了utf8mb4_bin时,MySQL返回了正确的结果。

您可以更改排序规则,如下所示。

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;