Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  The utf32 Character Set (UTF-32 Unicode Encoding)

12.9.7 utf32 字符集 (UTF-32 Unicode 编码)

utf32 字符集是固定长度的(像 ucs2 一样,而不是 utf16)。utf32 使用 32 位来表示每个字符,不像 ucs2(使用 16 位来表示每个字符),也不像 utf16(使用 16 位来表示一些字符,而使用 32 位来表示其他字符)。

utf32 需要的存储空间是 ucs2 的两倍,超过 utf16 需要的存储空间,但是 utf32 和 ucs2 都有一个优点,即存储空间的可预测性:utf32 需要的字节数等于字符数乘以 4。此外,与 utf16 不同的是,utf32 中没有编码技巧,因此存储的值等于代码值。

下面是一个示例,展示了如何根据 utf32 代码值来确定 utf8mb4 值:

/* Assume code value = 100cc LINEAR B WHEELED CHARIOT */
CREATE TABLE tmp (utf32_col CHAR(1) CHARACTER SET utf32,
                  utf8mb4_col CHAR(1) CHARACTER SET utf8mb4);
INSERT INTO tmp VALUES (0x000100cc,NULL);
UPDATE tmp SET utf8mb4_col = utf32_col;
SELECT HEX(utf32_col),HEX(utf8mb4_col) FROM tmp;

MySQL 对于未分配的 Unicode 字符或私有使用区域字符非常宽容。实际上,只有一个 utf32 的有效性检查:代码值不能大于 0x10ffff。例如,以下是非法的:

INSERT INTO t (utf32_column) VALUES (0x110000); /* illegal */