当前位置: 首页 > 知识库问答 >
问题:

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

孙胜泫
2023-03-14

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

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

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

共有2个答案

东典
2023-03-14

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

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

罗智刚
2023-03-14

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字符是什么?。

  •  类似资料:
    • 问题内容: 和 MySQL中的字符集有什么区别? __ 我已经知道 ASCII , UTF-8 , UTF-16 和 UTF-32 编码;但是我很好奇知道编码组与 MySQL Server中 定义的其他编码类型有什么区别。 使用而不是有什么特别的好处/提议吗? 问题答案: UTF-8是可变长度编码。对于UTF-8,这意味着存储一个代码点需要1-4个字节。但是,MySQL的编码称为“ utf8”(别

    • 我刚刚将我的mysql数据库从utf8转换为utf8mb4,以便支持Emojis,但现在我有一个编码问题。如果我用php打印文本,通常会显示特殊字符,但它们会在数据库中保存为LATIN1ü 我遵循这个指南https://mathiasbynens.be/notes/mysql-utf8mb4 在php中,我在建立连接后设置了这样的字符集 在转换之前,ä被保存为ä,ö被保存为ö等等。 现在它:ü-

    • 本文向大家介绍全面了解mysql中utf8和utf8mb4的区别,包括了全面了解mysql中utf8和utf8mb4的区别的使用技巧和注意事项,需要的朋友参考一下 一、简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,

    • MySQL中模式CHARSET VS表CHARSET VS列CHARSET有什么区别? 当我将表的字符集更改为utf8时,我可以在列中使用utf8mb4字符集吗? 谢谢

    • 在步骤5.7->8.0.23中从5.6->5.7->8.0.23升级mysql时,我收到一个警告: 在'mysql-schema的默认字符集:utf8'中,'mysql'是什么意思?是Innodb吗?

    • 在我的wordpress站点中,数据库(mysql)已经升级,以前的表字符集是utf8mb4,但现在变成utf8,它将不支持utf8mb4。因此,在我的wp配置文件中,我将字符集更改为utf8。 但我得到了这样的错误 http错误500