MySQL 8.4 Release Notes
12.9.7 UTF-32 字符集(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 */