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
代码值的情况下确定值:
/* 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 tmpVALUES (0x000100cc,NULL);UPDATE tmpSET 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 */