提问者:小点点

MySQL中的utf8mb4和utf8字符集有什么区别?


MySQL中的UTF8MB4UTF8字符集有什么区别?

我已经知道ASCII、UTF-8、UTF-16和UTF-32编码;但是我很想知道utf8mb4组编码与MySQL Server中定义的其他编码类型有什么区别。

使用UTF8MB4而不是UTF8有什么特别的好处/建议吗?


共2个答案

匿名用户

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

所以字符集“UTF8”/“UTF8MB3”不能存储所有的Unicode代码点:它只支持0x000到0xFFFF的范围,这被称为“基本多语言平面”。另请参见Unicode编码的比较。

这是MySQL文档(上一个版本的相同页面)对此所做的说明:

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

>

  • 对于BMP字符,UTF8[/UTF8MB3]和utf8mb4具有相同的存储特性:相同的代码值、相同的编码和相同的长度。

    对于一个补充字符,UTF8[/UTF8MB3]根本无法存储该字符,而utf8mb4需要四个字节才能存储。由于UTF8[/UTF8MB3]根本无法存储该字符,因此在UTF8[/UTF8MB3]列中没有任何补充字符,并且在从旧版本的MySQL升级UTF8[/UTF8MB3]数据时不必担心转换字符或丢失数据。

    因此,如果您希望您的列支持存储位于BMP之外的字符(您通常希望),例如emoji,请使用“utf8mb4”。另请参见在实际使用中最常见的非BMP Unicode字符是什么?。

  • 匿名用户

    utf8mb4字符集非常有用,因为现在我们不仅需要支持存储语言字符,还需要支持存储符号、新引入的emojis,等等。

    Mathias Bynens的一篇关于如何在MySQL数据库中支持完整的Unicode的精彩读物也能对此有所帮助。