10.9 Unicode 支持

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

BMP 字符具有以下 Feature:

补充字符位于 BMP 之外:

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

MySQL 支持以下 Unicode 字符集:

table10.2“ Unicode 字符集常规 Feature”总结了 MySQL 支持的 Unicode 字符集的一般 Feature。

table10.2 Unicode 字符集的一般特性

Character Set Supported Characters 每个字符所需的存储量
utf8mb3 , utf8 BMP only 1,2 或 3 个字节
ucs2 BMP only 2 bytes
utf8mb4 BMP 和补充 1,2、3 或 4 个字节
utf16 BMP 和补充 2 或 4 个字节
utf16le BMP 和补充 2 或 4 个字节
utf32 BMP 和补充 4 bytes

BMP 之外的字符将作为 REPLACEMENT CHARACTER 进行比较,并在转换为仅支持 BMP 字符(utf8mb3ucs2)的 Unicode 字符集时转换为'?'

如果您使用支持补充字符的字符集,并且比仅 BMP 的utf8mb3ucs2字符集“宽”,则应用程序可能会出现不兼容的问题;参见第 10.9.8 节“在 3 字节和 4 字节 Unicode 字符集之间转换”。该部分还描述了如何将 table 从(3 字节)utf8mb3转换为(4 字节)utf8mb4,以及在执行此操作时可能遇到的限制。

大多数 Unicode 字符集都可以使用类似的排序规则集。例如,每个都有丹麦语排序规则,其名称为utf8mb4_danish_ciutf8mb3_danish_ciutf8_danish_ciucs2_danish_ciutf16_danish_ciutf32_danish_ciutf16leexception,它只有两个排序规则。有关 Unicode 归类及其区分属性(包括补充字符的归类属性)的信息,请参阅第 10.10.1 节“ Unicode 字符集”

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

MySQL 对 UTF-8 值不使用 BOM。

使用 Unicode 与服务器通信的 Client 端应用程序应相应地设置 Client 端字符集(例如,通过发出SET NAMES 'utf8mb4'语句)。某些字符集不能用作 Client 端字符集。尝试将它们与SET NAMES设置字符集一起使用会产生错误。参见不允许的 Client 字符集

以下各节提供了有关 MySQL 中 Unicode 字符集的更多详细信息。

首页