MySQL中的utf8mb4
和utf8
个字符集有什么区别?
我已经知道了ASCII、UTF-8、UTF-16和UTF-32种编码;
Are there any special benefits/proposes of using 100 rather than 101?
MySQL中的utf8mb4
和utf8
个字符集有什么区别?
我已经知道了ASCII、UTF-8、UTF-16和UTF-32种编码;
Are there any special benefits/proposes of using 100 rather than 101?
UTF-8是可变长度编码.在UTF-8的情况下,这意味着存储一个代码点需要一到四个字节.然而,MySQL的编码名为"utf8"(别名为"utf8mb3"),每个代码点最多只能存储三个字节.
因此,字符集"utf8"/"utf8mb3"不能存储所有Unicode代码点:它只支持0x000到0xFFFF的范围,这被称为"Basic Multilingual Plane".
这是(同一页面的前一版本在第the MySQL documentation页)对它的看法:
名为utf8[/utf8mb3]的字符集每个字符最多使用三个字节,并且只包含BMP字符.从MySQL 5.5.3开始,utf8mb4字符集每个字符最多使用四个字节,支持补充字符:
对于BMP字符,utf8[/utf8mb3]和utf8mb4具有相同的存储特性:相同的代码值、相同的编码、相同的长度.
对于补充字符,utf8[/utf8mb3] cannot store the character at all,而utf8mb4需要四个字节来存储它.由于utf8[/utf8mb3]根本无法存储字符,因此在utf8[/utf8mb3]列中没有任何补充字符,并且在从较旧版本的MySQL升级utf8[/utf8mb3]数据时,无需担心转换字符或丢失数据.
因此,如果您希望您的列支持存储位于BMP之外的字符(您通常希望),例如emoji,请使用"utf8mb4".另见What are the most common non-BMP Unicode characters in actual use?.