MySQL 9.0 發行說明
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 */