10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

10.9 Unicode支持

Unicode标准包括来自基本多语言平面(BMP)的字符和位于BMP之外的补充字符。本节描述MySQL对Unicode的支持。有关Unicode标准本身的信息,请访问Unicode协会网站

BMP字符具有以下特征:

  • 它们的码点值在0到65535之间(或U + 0000而且U +飞行符).

  • 它们可以使用8、16或24位(1到3字节)的可变长度编码进行编码。

  • 它们可以使用16位(2字节)的固定长度编码进行编码。

  • 它们足以处理主要语言中的几乎所有字符。

补充字符位于BMP之外:

  • 它们的代码点值介于U + 10000而且U + 10飞行符).

  • Unicode对补充字符的支持要求字符集具有BMP字符以外的范围,因此比BMP字符占用更多的空间(每个字符最多4个字节)。

编码Unicode数据的UTF-8(含8位单位的Unicode转换格式)方法是根据RFC 3629实现的,该方法描述了从1到4个字节的编码序列。UTF-8的思想是使用不同长度的字节序列编码各种Unicode字符:

  • 基本的拉丁字母、数字和标点符号使用一个字节。

  • 大多数欧洲和中东的文字字母都属于2字节序列:扩展的拉丁字母(带有波浪号、马克隆号、锐号、庄重和其他口音)、西里尔字母、希腊字母、亚美尼亚字母、希伯来字母、阿拉伯字母、叙利亚字母和其他字母。

  • 韩国、中国和日本的表意文字使用3字节或4字节序列。

MySQL支持以下Unicode字符集:

  • utf8mb4: Unicode字符集的UTF-8编码,每个字符使用1到4个字节。

  • utf8mb3: Unicode字符集的UTF-8编码,每个字符使用1到3个字节。

  • use utf8:的别名。utf8mb3

  • ucs2: Unicode字符集的UCS-2编码,每个字符使用两个字节。

  • utf16:每个字符使用两个或四个字节的Unicode字符集的UTF-16编码。就像ucs2但是有一个用于补充字符的扩展。

  • utf16le: Unicode字符集的UTF-16LE编码。就像utf16但是小端排序而不是大端排序。

  • utf32:每个字符使用四个字节的Unicode字符集的UTF-32编码。

请注意

utf8mb3字符集已弃用,您应该期望在未来的MySQL版本中删除它。请使用utf8mb4代替。虽然use utf8是当前的别名utf8mb3,在某种程度上use utf8期望成为参考utf8mb4.的意思避免含糊不清use utf8,可以考虑指定utf8mb4显式地用于字符集引用而不是use utf8

表10.2“Unicode字符集一般特征”,总结了MySQL支持的Unicode字符集的一般特征。

表10.2 Unicode字符集一般特征

字符集 支持字符 每个字符所需的存储空间
utf8mb3use utf8 BMP仅 1、2或3个字节
ucs2 BMP仅 2字节
utf8mb4 BMP和补充 1、2、3或4个字节
utf16 BMP和补充 2或4字节
utf16le BMP和补充 2或4字节
utf32 BMP和补充 4个字节

BMP之外的字符比较为替换字符并转换为“?”转换为只支持BMP字符的Unicode字符集(utf8mb3ucs2).

如果您使用支持补充字符的字符集,那么更广泛的比BMP-onlyutf8mb3而且ucs2字符集,你的应用程序有潜在的不兼容问题;看到第10.9.8节“3字节和4字节Unicode字符集之间的转换”.该部分还描述了如何将表从(3字节)utf8mb3(4字节)utf8mb4,以及在这样做时会有什么限制。

对于大多数Unicode字符集都有类似的排序规则集。例如,每一个都有一个丹麦的排序规则,其名称为utf8mb4_danish_ciutf8mb3_danish_ciutf8_danish_ciucs2_danish_ciutf16_danish_ci,utf32_danish_ci.唯一的例外是utf16le这本书只有两种分类。有关Unicode排序规则及其区分属性的信息,包括补充字符的排序规则属性,请参见第10.10.1节“Unicode字符集”

UCS-2、UTF-16和UTF-32的MySQL实现以大端字节顺序存储字符,并且在值的开头不使用字节顺序标记(BOM)。其他数据库系统可能使用小端字节顺序或BOM。在这种情况下,在这些系统和MySQL之间传输数据时需要执行值的转换。UTF-16LE的实现是小端式的。

MySQL对UTF-8值不使用BOM。

使用Unicode与服务器通信的客户机应用程序应该相应地设置客户机字符集(例如,通过发出设置名称“utf8mb4”声明)。某些字符集不能用作客户端字符集。试图用它们组名称设置字符集产生一个错误。看到不允许的客户端字符集

下面的部分提供了MySQL中Unicode字符集的更多细节。