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



我正在使用MySQL5.6。数据库字符集为 utf8mb4。当我搜索如下所示的表情符号时,我得到了意想不到的结果。

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

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

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

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

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

最新更新