MySQL在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes
4的意思,专门用来兼容四字节的unicode。其实,utf8mb4是utf8的超集,理论上原来使用utf8,然后将字符集修改为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。当然,为了节省空间,一般情况下使用utf8也就够了。

既然utf8应付日常使用完全没有问题,那为什么还要使用utf8mb4呢? 低版本的mysql支持的utf8编码,最大字符长度为 3 字节,如果遇到 4
字节的字符就会出现错误了。

三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xFFFFFF,也就是 Unicode
中的基本多文平面(BMP)。也就是说,任何不在基本多文平面的 Unicode字符,都无法使用MySQL原有的 utf8 字符集存储。

这些不在BMP中的字符包括哪些呢?最常见的就是Emoji 表情(Emoji 是一种特殊的 Unicode
编码,常见于IOS和Android手机上),和一些不常用的汉字,以及任何新增的 Unicode 字符等等。

理论上将, UTF-8 格式使用一至六个字节编码字符。最新的 UTF-8 规范只使用一到四个字节,正好能够表示所有的 17个 Unicode 平面。

而utf8 则是 Mysql 早期版本中支持的一种字符集,只支持最长三个字节的 UTF-8字符,也就是 Unicode
中的基本多文本平面。在MySQL5.5.3版本后,要在 Mysql 中保存 4 字节长度的 UTF-8 字符,就可以使用 utf8mb4
字符集了。例如可以用utf8mb4字符编码直接存储emoj表情,而不是存表情的替换字符。

为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8. 对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql
官方建议,使用 VARCHAR 替代 CHAR。

另外,如果使用的是Java服务器,请升级或确保你的mysql connector版本高于5.1.13,否则仍然无法使用utf8mb4。异常信息:
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC
Connection; nested exception is org.apache.commons.dbcp.SQLNestedException:
Cannot create PoolableConnectionFactory (Unknown initial character set index
'224' received from server. Initial client character set can be forced via the
'characterEncoding' property.)

 

技术
今日推荐
PPT
阅读数 121
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信