# 10.9.7 utf32 字符集(UTF-32 Unicode 编码)
这utf32
字符集是固定长度的(比如ucs2
而且不像utf16
)。utf32
每个字符使用 32 位,不像ucs2
(每个字符使用 16 位),并且不像utf16
(某些字符使用 16 位,其他字符使用 32 位)。
utf32
占用两倍的空间ucs2
和更多的空间utf16
, 但utf32
具有相同的优势ucs2
它是可预测的存储:所需的字节数utf32
等于字符数乘以 4。另外,不像utf16, 编码没有技巧
utf32,因此存储的值等于代码值。
为了演示后一种优势如何有用,这里有一个示例,说明如何确定
utf8mb4给定的值
utf32代码值:
MySQL 对添加未分配的 Unicode 字符或私有使用区域字符非常宽容。
/* 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;
实际上只有一个有效性检查utf32: 没有代码值可以大于
0x10ffff.
例如,这是非法的:
INSERT INTO t (utf32_column) VALUES (0x110000); /* illegal */