在 MySQL 中,utf8mb4
和 utf8mb3
是两种 UTF-8 编码的字符集,它们的主要区别如下:
1. 支持的字符范围不同utf8mb3
:
原来的 UTF-8 编码实现,支持最多 3 个字节的字符。
无法存储超出基本多语言平面 (BMP) 的 Unicode 字符(U+10000 至 U+10FFFF),例如某些表情符号和特殊的语言字符。
主要用于存储常规的语言字符,例如大部分西方语言的字符和中日韩文字。utf8mb4
:
完整实现了 UTF-8 编码,支持最多 4 个字节的字符。
可存储 BMP 范围以外的字符,例如表情符号、部分古文字及某些生僻汉字。
2. 默认字符集变化
MySQL 8.0 中,utf8mb4
已成为默认的 UTF-8 编码字符集,utf8mb3
被标记为 弃用(deprecated)。因此,在新版本中建议使用 utf8mb4
以保证更好的兼容性。
3. 存储空间不同utf8mb3
:每个字符最多占用 3 个字节。utf8mb4
:每个字符最多占用 4 个字节。
如果表中有大量 4 字节字符,可能会导致表的存储空间增加。
4. 迁移和兼容性
如果当前数据库使用的是 utf8mb3
,迁移到 utf8mb4
时需要特别注意:表字段类型可能需要调整(如 VARCHAR
的长度)。
一些字符可能需要重新编码。
MySQL 索引长度受限(最大 767 字节,InnoDB 的索引长度限制),在使用 utf8mb4
时,索引长度需要重新计算。
5. 选择建议
优先使用 utf8mb4
:支持更广泛的字符集,尤其是在需要存储表情符号或特殊字符的场景下。
仅在兼容性需求或存储限制的特殊情况下使用 utf8mb3
。
示例
创建 utf8mb4
字符集表:
CREATE TABLE example (
id INT AUTO_INCREMENT PRIMARY KEY,
text_column VARCHAR(255) CHARACTER SET utf8mb4
);
如果您正在使用旧版本的 MySQL 并计划升级,建议尽快迁移到 utf8mb4
,以确保数据库能够处理所有 Unicode 字符。
发布者:myrgd,转载请注明出处:https://www.object-c.cn/5064