MYSQL使用utf8mb4字符集兼容Emoji表情等特殊字符

欢迎加入PHP|dba|Js技术交流群:14364084一起讨论

无意中遇到微信昵称中特殊字符无法保存到数据库的问题,比如abc🍃test🍃def,插入mysql中,从第一个特殊字符开始,后面都直接忽略了。包括我这篇日志,改编码之前,只能显示到abc及之前的内容。后来通过base64编码的方式存入数据库解决了。

为了弄清楚原因,上网查资料发现是因为编码问题,这些Emoji表情是长度为4字节的字符,mysql的utf8默认只支持3字节。

MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters 这里看,基本就是0000~FFFF这一区。 从MYSQL5.5开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集。

utf8mb4 is a superset of utf8

utf8mb4兼容utf8,且比utf8能表示更多的字符。

为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、

涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集

这必须要作为移动互联网行业的一个技术选型的要点

注意:utf8mb4需要 >= MySQL 5.5.3版本、从库也必须是5.5的了、低版本不支持这个字符集、复制报错。

sql查询语句中,有些定义SET NAMES utf8的需要改为SET NAMES utf8mb4,否则虽然不会丢失数据,但是会把表情符替换为四个问号。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*