MySQL 查询遇到 emoji 时为何不精确了呢?
发布于 4 年前 作者 mengdu 2072 次浏览 来自 问答

用户表里的昵称字段是唯一,并且支持表情的,最近测试反馈说更换表情昵称总是昵称重复了。

很是奇怪,做了如下测试,创建一个表,录入一些表情

CREATE TABLE `emoji` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `emoji` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

INSERT INTO `test`.`emoji`(`id`, `emoji`) VALUES (1, '😂😒👭😞');
INSERT INTO `test`.`emoji`(`id`, `emoji`) VALUES (2, '😁😝😝😝😯🤣🤣🧐🧐😝😯😂😒👭😞');
INSERT INTO `test`.`emoji`(`id`, `emoji`) VALUES (3, '😝😯🤣');
INSERT INTO `test`.`emoji`(`id`, `emoji`) VALUES (4, '🤣🤣');
INSERT INTO `test`.`emoji`(`id`, `emoji`) VALUES (5, '😝😯');
INSERT INTO `test`.`emoji`(`id`, `emoji`) VALUES (6, '👭😞');
INSERT INTO `test`.`emoji`(`id`, `emoji`) VALUES (7, '😝');
INSERT INTO `test`.`emoji`(`id`, `emoji`) VALUES (8, '😝😝😯🤣🤣🧐');
INSERT INTO `test`.`emoji`(`id`, `emoji`) VALUES (9, '😁👭😝');
INSERT INTO `test`.`emoji`(`id`, `emoji`) VALUES (10, '😁🧐😝');
INSERT INTO `test`.`emoji`(`id`, `emoji`) VALUES (11, '😁😂😝');
INSERT INTO `test`.`emoji`(`id`, `emoji`) VALUES (12, '😁👭🧐');

执行查询

select id, emoji, MD5(emoji), TO_BASE64(emoji), CHARSET(emoji), HEX(emoji) from emoji where emoji = '😯🤣👭';

image.png

结果出了多条记录,为何会存在这种情况呢?

回到顶部