新项目只考虑utf8mb4
UTF-8 编码是一种变长的编码机制,可以用1~4个字节存储字符。
因为历史遗留问题,MySQL 中的 utf8 编码并不是真正的 UTF-8,而是阉割版的,最长只有3个字节。当遇到占4个字节的 UTF-8 编码,例如 emoji 字符或者复杂的汉字,也就是我们通常在聊天时发的小黄脸表情,会导致存储异常。
从 5.5.3 开始,MySQL 开始用 utf8mb4 编码来实现完整的 UTF-8,其中 mb4 表示 most bytes 4,最多占用4个字节,用来兼容四个字节的Unicode(万国码)。utf8mb4是utf8的一个扩展。从 8.0 之后,将会在某个版本开始用 utf8mb4 作为默认字符编码。
简单总结:
1、MySQL的 utf8mb 是真正的UTF-8,最多占用4个字节
。 2、MySQL的utf8是一种“专属的编码”,最多可占用3个字节,能够编码的Unicode字符并不多
如果正在使用MySQL或者MariaDB ,不要用utf8编码,改用utf8mb4,这里提供一个指南,用于将现有数据库的字符编码从utf8转成utf8mb4
https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4