Documentation Home
MySQL 8.0 参考手册  / 第 10 章字符集、排序规则、Unicode  / 10.9 Unicode 支持  /  10.9.7 utf32字符集(UTF-32 Unicode编码)

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

utf32字符集是固定长度 的(likeucs2和 unlike utf16)。 utf32每个字符使用 32 位,不像ucs2(它对每个字符使用 16 位),并且不像utf16(它对某些字符使用 16 位,对其他字符使用 32 位)。

utf32占用的空间是 的两倍 ucs2和更多空间 utf16,但utf32具有相同的优点,ucs2即存储可预测:所需的字节数 utf32等于字符数乘以 4。此外,与 不同utf16的是,在 中没有编码技巧utf32,所以存储的值等于代码值。

为了演示后一个优势如何有用,下面是一个示例,说明如何在utf8mb4 给定utf32代码值的情况下确定值:

/* 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 */