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