MySQL 8.3 Release Notes
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 */