从 varchar 列 returns 不同记录中搜索表情符号

Searching emoji from varchar column returns different record

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

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

它应该 return 只有 id=165。有谁知道这是为什么?

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

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

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;