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