charset-unicode-utf32.md 1.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
### 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 */
```