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。
更多:
utf8 = utf8mb3,因为 utf8 是 utf8mb3 的别名。来源:10.9.2 The utf8mb3 Character Set (3-Byte UTF-8 Unicode Encoding)
utf8mb4 才能存储 emoji。
历史
摘要译文:(源自官网文档: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 字符集之间转换