MySQL的 utf8 和 utf8mb4

yokila
yokila
发布于 2024-04-27 / 5 阅读
0
0

MySQL的 utf8 和 utf8mb4

MySQL的报错提示

3719, "'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous."

译文:“UTF 8”目前是字符集UTF8MB3的别名,在将来的版本中将被UTF8MB4替换。请考虑使用UTF8MB4,以便明确无误。

比较

摘要译文:(源自官方文档:10.9.1 utf8mb4 字符集(4 字节 UTF-8 Unicode 编码)

  • utf8mb4 字符集包含以下特性:

    • 支持 BMP 和补充字符。

    • 每个多字节字符最多需要四个字节。

  • utf8mb3支持特性:

    • 字符集仅支持 BMP 字符(不支持补充字符)

    • 每个字符最多使用三个字节

  • utf8mb4 与 utf8mb3字符集形成鲜明对比:

    • 对于 BMP 字符,utf8mb4 和 utf8mb3 具有相同的存储特点:相同的代码值,相同的编码,相同的长度。

    • 对于补充字符,utf8mb4 需要四个字节来存储它,而 utf8mb3 不能存储。将 utf8mb3 列转换为 utf8mb4 时,无需担心转换补充字符,因为 utf8mb3 没有。

  • utf8mb4 是 utf8mb3 的超集,因此对于诸如串联(concat 、比较、排序)后,结果的字符集为 utf8mb4,并且排序规则为 utf8mb4_col。

更多:

历史

摘要译文:(源自官网文档:MySQL 8.0:何时使用 utf8mb3 而不是 utf8mb4?

  • MySQL 4.1 (2004) 是第一个支持字符集和排序规则的版本。 默认字符集为 latin1,但 utf8[mb3] 可作为选项使用。 一个被选用的优化为将 utf8 限制为 3 个字节,这足以处理几乎所有现代语言。

  • MySQL 5.5 (2010) 使用新的 utf8mb4 字符集增加了对最多 4 字节 utf8 的支持。

  • MySQL 5.7 (2015) 添加了一些优化,例如可变长度排序缓冲区,并将 InnoDB 的默认行格式更改为 DYNAMIC。这允许在 VARCHAR(255) 上使用 utf8mb4 进行索引;这使得迁移变得更加困难。

  • MySQL 8.0(2018)极大地提高了 utf8mb4 的性能,并添加了几个新的排序规则。它现在是 MySQL 的默认字符集。

  • 新的基于 UTF8MB4 的排序规则比任何旧的基于 UTF8MB3 的排序规则都快得多。

其他

  • utf8mb4 的最低 mysql版本支持版本为 5.5.3+。(未找到官方文档证实具体版本,只知道是5.5开始支持)

  • MySQL Connector/J 首次提及 utf8mb4 的支持是在 5.1.13(2010-06-24):见 release-note

  • 数据库连接配置连接字符集也要设置为 utf8mb4,否则在 严格模式 下会出现 Incorrect string value: /xF0/xA1/x8B/xBE/xE5/xA2… for column 'name’这样的错误,非严格模式下此后的数据会被截断。(未找到官方文档证实,未实践,忘记哪里得到的笔记)

  • 将其他字符集(非utf8)转换为 utf8mb4,会有乱码问题,以及其他不确定问题。(未找到官方文档证实,未实践,忘记哪里得到的笔记)

  • 关于转换的官方文档:10.9.8 在 3 字节和 4 字节 Unicode 字符集之间转换


评论