首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >utf8mb4和MySQL中的utf8字符集有什么区别?

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

Stack Overflow用户
提问于 2015-05-06 18:45:12
回答 5查看 232K关注 0票数 418

在MySQL中,utf8mb4utf8字符集有什么不同

我已经知道了ASCII 8,UTF-16和UTF-32编码;但是我很好奇utf8mb4编码组与MySQL服务器中定义的其他编码类型有什么不同。

使用 utf8**?**而不是有什么特别的好处/建议

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-05-06 18:47:52

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

因此字符集"utf8"/"utf8mb3“不能存储所有的Unicode代码点:它只支持从0x000到0xFFFF的范围,也就是所谓的"Basic Multilingual Plane”。另请参见Comparison of Unicode encodings

这是(上一个版本的同一页面) the MySQL documentation对此的评论:

名为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“。另请参见What are the most common non-BMP Unicode characters in actual use?

票数 480
EN

Stack Overflow用户

发布于 2016-10-31 20:28:15

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

马蒂亚斯·拜恩斯在How to support full Unicode in MySQL databases上的一篇不错的读物也可以说明这一点。

票数 75
EN

Stack Overflow用户

发布于 2018-09-15 02:25:28

摘自MySQL 8.0 Reference Manual

  • utf8mb4:使用对Unicode字符集进行UTF-8编码每个character.
  • utf8mb3:使用一到四个字节使用对Unicode字符集进行UTF-8编码每个字符使用一到三个字节

在MySQL中,utf8目前是utf8mb3的别名,已被弃用,并将在未来的MySQL版本中删除。在这一点上,utf8 将成为 utf8mb4的引用。

因此,不管别名是什么,您都可以有意识地为自己设置一个utf8mb4编码。

为了完整地回答这个问题,我想在下面添加 @WilliamEntriken's 注释(也取自手册):

若要避免对utf8含义的歧义,请考虑为字符集引用显式指定utf8mb4,而不是utf8

票数 64
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30074492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档