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

我已经知道了ASCIIUTF-8UTF-16UTF-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?.

Mysql相关问答推荐

在联合查询中使用GROUP BY和ORDER BY

Ballerina SQL 中是否也应该考虑输入清理?

按唯一列排序,但保持匹配的列在一起

从连接表中try 按唯一ID计算行数 MySQL

特定时间段内每个客户的运行总计

排序子查询结果并返回每个 ID 的第一行

如何在 Shopware 6 DAL 中实施 Haversine 公式?

多个 FULLTEXT 索引上的 MySQL SELECT.结果极其缓慢

Mysql,显示谁已经和没有 Select 退出巴士服务

mysql insert into select join - 通过连接表将值从一列复制到另一表

此更新查询是否有任何可能的重写选项?

带有 PARTITION BY 子句的 ROW_NUMBER() 停止在 MariaDB 上工作

MYSQL除以零警告,奇怪的行为

在 SQL 中的 case 语句之后将新列转换为 INT

更新和替换未加引号的 JSON 字符串

查询给出错误时的 mySQL Group_Concat 和 Case

即使我的约束是正确的,如何解决 errno: 150 外键约束形成错误?

为什么从我的 SQL 查询中删除 BINARY 函数调用会如此显着地改变查询计划?

为什么在有 BEGIN 和 END 时为存储过程指定分隔符?

PDO:MySQL 服务器已消失