有什么区别utf8mb4
and utf8
字符集在MySQL?
我已经知道了ASCII, UTF-8, UTF-16 and UTF-32编码;
但我很想知道有什么区别utf8mb4
具有其他编码类型定义的编码组MySQL服务器.
使用有什么特别的好处/建议吗utf8mb4
而不是utf8
?
UTF-8 https://en.wikipedia.org/wiki/UTF-8是一种变长编码。对于 UTF-8,这意味着存储一个代码点需要一到四个字节。然而,MySQL 的编码称为“utf8”(别名“utf8mb3”),每个代码点最多只能存储三个字节。
所以字符集“utf8”/“utf8mb3”不能存储所有Unicode代码点:它只支持范围0x000到0xFFFF,这被称为“基础多语种飞机 http://en.wikipedia.org/wiki/Plane_%28Unicode%29#Basic_Multilingual_Plane”。
也可以看看Unicode 编码比较 http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings#In_detail.
这就是(同一页面的先前版本)MySQL 文档 https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html不得不说一下:
名为 utf8[/utf8mb3] 的字符集每个字符最多使用三个字节,并且仅包含 BMP 字符。从 MySQL 5.5.3 开始,utf8mb4 字符集每个字符最多使用四个字节,支持补充字符:
-
对于BMP字符,utf8[/utf8mb3]和utf8mb4具有相同的存储特性:相同的码值、相同的编码、相同的长度。
-
对于补充字符,utf8[/utf8mb3]根本无法存储字符,而utf8mb4需要四个字节来存储它。由于 utf8[/utf8mb3] 根本无法存储字符,因此 utf8[/utf8mb3] 列中没有任何补充字符,并且在从旧版本的 utf8[/utf8mb3] 数据升级时无需担心转换字符或丢失数据。 MySQL。
因此,如果您希望您的列支持存储位于 BMP 之外的字符(并且您通常希望这样做),例如emoji https://en.wikipedia.org/wiki/Emoji,使用“utf8mb4”。也可以看看实际使用中最常见的非 BMP Unicode 字符有哪些? https://stackoverflow.com/questions/5567249/what-are-the-most-common-non-bmp-unicode-characters-in-actual-use.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)