前言:最近在工作中碰到插入特殊字符报错的问题,网上也有很多人在讲UTF8与UTF8mb4的区别,这里就不再赘述,只是亲自验证一下,简单记录一下过程
废话不多说,拿数据说话
一:首先准备两个数据库:test001与test002
- test001采用utf8的字符集,
- test002采用utf8mb4字符集
二:在两个表中都新建一张user表,字段属性为varchar(255),并且准备插入的SQL语句:
INSERT into `user` VALUES ("中国👀");
分别在两个数据库执行该SQL语句
- test001运行截图:
- test002执行结果:
分别查看两张表:
1.test001的user表:
2.test002的user表:
三:结论:
综上验证:UTF8的编码方式,在Mysql数据库中可以是以1、2、3个字节存储字符的,
但是 : 有些特殊的字符比如一个emoji表情是4个字节,那么以UTF8的编码方式的MYSQL数据库就无法正确编码,
所以 : 在存储的时候出现错误,而采用UTF8mb4中的"mb4",是"most byte 4"即允许最大四个字节的意思,可以正常的存取emoji字符
建议:为了避免出现数据库插入特殊字符数据异常,建议在数据库的建表中采用 UTF8mb4 的字符集 !