MySQL在5.5.3之后增加了utf8mb4的编码,mb4即4-Byte UTF-8 Unicode Encoding,专门用来兼容四字节的unicode。utf8mb4为utf8的超集并兼容utf8,比utf8能表示更多的字符。

为什么要用utf8mb4?

低版本的MySQL支持的utf8编码,最大字符长度为 3 字节,如果遇到 4 字节的字符就会出现错误了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。

也就是说,任何不在基本多文平面的 Unicode字符,都无法使用MySQL原有的 utf8 字符集存储。这些不在BMP中的字符包括哪些呢?

最常见的就是Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和一些不常用的汉字,以及任何新增的 Unicode 字符等等。 如果要在 MySQL中保存 4 字节长度的 UTF-8 字符,就需要使用 utf8mb4 编码,但是要注意只有 5.5.3 版本以后的MySQL才支持(查看版本命令: select version())。

为了获取更好的兼容性,建议使用 utf8mb4 而非 utf8. 对于CHAR类型数据,utf8mb4会多消耗一些空间,但根据 MySQL官方建议,可以使用 VARCHAR 替代 CHAR。 ps:char是一种固定长度的类型,varchar则是一种可变长度的类型(因为varchar长度固定,方便程序的存储与查找,所以char类型存取速度优于varchar,即以空间换效率)

还没有评论