在mysql中utf8mb4和utf8 charsets有什么区别?

在mysql中utf8mb4utf8 charsets有什么区别?
我已经知道ASCII,UTF-8,UTF-16UTF-32编码; 但我很想知道'utf8mb4'编码组与其他编码types在mysql服务器中定义的区别是什么。

使用utf8mb4而不是utf8有什么特别的好处?

UTF-8是一种可变长度编码。 在UTF-8的情况下,这意味着存储一个代码点需要一到四个字节。 但是,名为“utf8”的MySQL编码只能存储每个代码点最多三个字节。

所以字符集“utf8”不能存储所有的Unicode代码点:它只支持范围0x000到0xFFFF,这就是所谓的“ 基本多语言平面 ”。 请参阅Unicode编码的比较 。

官方文件就是这样说的:

名为utf8的字符集每个字符最多使用三个字节,并且只包含BMP字符。 从MySQL 5.5.3开始,utf8mb4字符集使用每个字符最多四个字节支持补充字符:

  • 对于BMP字符,utf8和utf8mb4具有相同的存储特征:相同的码值,相同的编码,相同的长度。

  • 对于补充字符, utf8根本不能存储字符 ,而utf8mb4需要四个字节来存储它。 由于utf8根本无法存储字符,因此在utf8列中没有任何补充字符,在升级早期版本的MySQL的utf8数据时,不必担心转换字符或丢失数据。

所以,如果你想让你的专栏支持存储BMP以外的字符(你通常想要),比如表情符号 ,可以使用“utf8mb4”。 另请参见实际使用中最常见的非BMP Unicode字符是什么? 。

从现在开始,我们不需要支持仅用于存储语言字符,而且还需要符号,新引入的表情符号等等。 如何在 Mathias Bynens 支持完整的Unicode数据库 ,还可以对此有所了解。