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

utf32字符集是固定长度的(例如ucs2utf16不同)。 utf32对每个字符使用 32 位,与ucs2(对每个字符使用 16 位)和utf16(对某些字符使用 16 位而对其他字符使用 32 位)不同。

utf32的空间是ucs2的两倍,比utf16的空间大,但是utf32ucs2具有相同的优点,可以预测存储: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 */