MySQL 9.0 发行说明
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 */