Mysql表情符插入报错问题解决

1、utf8建表
drop table if exists mx_3;
CREATE TABLE `mx_3` (
  `游戏id` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `游戏名称` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `月收礼触手币` varchar(255) COLLATE utf8_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
2、表情符数据插入测试
INSERT INTO `tv`.`mx_3` (`游戏id`, `游戏名称`, `月收礼触手币`)
VALUES ('1187', 'NBA2KOL', '380'),('1187', '唱歌给你听【emoji】', '198');

报错:
Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...'的错误。
3、utf8mb4建表
drop table if exists mx_3;
CREATE TABLE `mx_3` (
  `游戏id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `游戏名称` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `月收礼触手币` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
4、表情符数据插入测试
INSERT INTO `tv`.`mx_3` (`游戏id`, `游戏名称`, `月收礼触手币`)
VALUES ('1187', 'NBA2KOL', '380'),('1187', '唱歌给你听【emoji】', '198');

表情符数据插入正常。
5、原因分析
普通的字符串或者表情都是占位3个字节,所以utf8足够用了;但是移动端的表情符号占位是4个字节,普通的utf8就不够用了;为了应对无线互联网的挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集。
说来尴尬,此网站也不支持表情符的输入与展示;在文档编辑两次,一发布都将表情符及其后面的内容都删去了,才有后来插入图片的展示的效果。

猜你喜欢

转载自blog.csdn.net/babyfish13/article/details/80611703