Skip to content

Commit 869591c

Browse files
authored
tidb: add GB18030 doc (#18662)
1 parent 88a207d commit 869591c

10 files changed

+199
-46
lines changed

TOC.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,6 +1006,7 @@
10061006
- 字符集和排序规则
10071007
- [概述](/character-set-and-collation.md)
10081008
- [GBK](/character-set-gbk.md)
1009+
- [GB18030](/character-set-gb18030.md)
10091010
- [Placement Rules in SQL](/placement-rules-in-sql.md)
10101011
- 系统表
10111012
- `mysql` Schema

br/backup-and-restore-overview.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ TiDB 支持将数据备份到 Amazon S3、Google Cloud Storage (GCS)、Azure Blo
115115
| 功能 | 相关 issue | 解决方式 |
116116
| ---- | ---- | ----- |
117117
|GBK charset|| BR 在 v5.4.0 之前不支持恢复 `charset=GBK` 的表。并且,任何版本的 BR 都不支持恢复 `charset=GBK` 的表到 v5.4.0 之前的 TiDB 集群。|
118+
|GB18030 charset|| BR 在 v9.0.0 之前不支持恢复 `charset=GB18030` 的表。并且,任何版本的 BR 都不支持恢复 `charset=GB18030` 的表到 v9.0.0 之前的 TiDB 集群。|
118119
| 聚簇索引 | [#565](https://github.com/pingcap/br/issues/565) | 确保恢复时集群的 `tidb_enable_clustered_index` 全局变量和备份时一致,否则会导致数据不一致的问题,例如 `default not found` 和数据索引不一致。 |
119120
| New collation | [#352](https://github.com/pingcap/br/issues/352) | 确保恢复时集群的 `mysql.tidb` 表中 `new_collation_enabled` 变量值和备份时的一致,否则会导致数据索引不一致和 checksum 通不过。更多信息,请参考 [FAQ - BR 为什么会报 `new_collations_enabled_on_first_bootstrap` 不匹配?](/faq/backup-and-restore-faq.md#恢复时为什么会报-new_collation_enabled-不匹配)|
120121
| 全局临时表 | | 确保使用 BR v5.3.0 及以上版本进行备份和恢复,否则会导致全局临时表的表定义错误。 |

character-set-and-collation.md

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: 字符集和排序规则
33
aliases: ['/docs-cn/dev/character-set-and-collation/','/docs-cn/dev/reference/sql/characterset-and-collation/','/docs-cn/dev/reference/sql/character-set/']
4-
summary: TiDB 支持的字符集包括 ascii、binary、gbk、latin1、utf8 和 utf8mb4。排序规则包括 ascii_bin、binary、gbk_bin、gbk_chinese_ci、latin1_bin、utf8_bin、utf8_general_ci、utf8_unicode_ci、utf8mb4_0900_ai_ci、utf8mb4_0900_bin、utf8mb4_bin、utf8mb4_general_ci 和 utf8mb4_unicode_ci。TiDB 强烈建议使用 utf8mb4 字符集,因为它支持更多字符。在 TiDB 中,默认的排序规则受到客户端的连接排序规则设置的影响。如果客户端使用 utf8mb4_0900_ai_ci 作为连接排序规则,TiDB 将遵循客户端的配置。TiDB 还支持新的排序规则框架,用于在语义上支持不同的排序规则
4+
summary: 了解 TiDB 支持的字符集和排序规则
55
---
66

77
# 字符集和排序规则
@@ -99,17 +99,18 @@ SHOW CHARACTER SET;
9999
```
100100

101101
```
102-
+---------+-------------------------------------+-------------------+--------+
103-
| Charset | Description | Default collation | Maxlen |
104-
+---------+-------------------------------------+-------------------+--------+
105-
| ascii | US ASCII | ascii_bin | 1 |
106-
| binary | binary | binary | 1 |
107-
| gbk | Chinese Internal Code Specification | gbk_chinese_ci | 2 |
108-
| latin1 | Latin1 | latin1_bin | 1 |
109-
| utf8 | UTF-8 Unicode | utf8_bin | 3 |
110-
| utf8mb4 | UTF-8 Unicode | utf8mb4_bin | 4 |
111-
+---------+-------------------------------------+-------------------+--------+
112-
6 rows in set (0.00 sec)
102+
+---------+-------------------------------------+--------------------+--------+
103+
| Charset | Description | Default collation | Maxlen |
104+
+---------+-------------------------------------+--------------------+--------+
105+
| ascii | US ASCII | ascii_bin | 1 |
106+
| binary | binary | binary | 1 |
107+
| gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 |
108+
| gbk | Chinese Internal Code Specification | gbk_chinese_ci | 2 |
109+
| latin1 | Latin1 | latin1_bin | 1 |
110+
| utf8 | UTF-8 Unicode | utf8_bin | 3 |
111+
| utf8mb4 | UTF-8 Unicode | utf8mb4_bin | 4 |
112+
+---------+-------------------------------------+--------------------+--------+
113+
7 rows in set (0.000 sec)
113114
```
114115

115116
TiDB 支持以下排序规则:
@@ -124,6 +125,8 @@ SHOW COLLATION;
124125
+--------------------+---------+-----+---------+----------+---------+---------------+
125126
| ascii_bin | ascii | 65 | Yes | Yes | 1 | PAD SPACE |
126127
| binary | binary | 63 | Yes | Yes | 1 | NO PAD |
128+
| gb18030_bin | gb18030 | 249 | | Yes | 1 | PAD SPACE |
129+
| gb18030_chinese_ci | gb18030 | 248 | Yes | Yes | 1 | PAD SPACE |
127130
| gbk_bin | gbk | 87 | | Yes | 1 | PAD SPACE |
128131
| gbk_chinese_ci | gbk | 28 | Yes | Yes | 1 | PAD SPACE |
129132
| latin1_bin | latin1 | 47 | Yes | Yes | 1 | PAD SPACE |
@@ -136,7 +139,7 @@ SHOW COLLATION;
136139
| utf8mb4_general_ci | utf8mb4 | 45 | | Yes | 1 | PAD SPACE |
137140
| utf8mb4_unicode_ci | utf8mb4 | 224 | | Yes | 8 | PAD SPACE |
138141
+--------------------+---------+-----+---------+----------+---------+---------------+
139-
13 rows in set (0.00 sec)
142+
15 rows in set (0.000 sec)
140143
```
141144

142145
> **警告:**
@@ -170,7 +173,7 @@ SHOW COLLATION WHERE Charset = 'utf8mb4';
170173
5 rows in set (0.001 sec)
171174
```
172175

173-
TiDB 对 GBK 字符集的支持详情见 [GBK](/character-set-gbk.md)
176+
TiDB 对 GBK 字符集的支持详情参见 [GBK 字符集](/character-set-gbk.md),对 GB18030 字符集的支持详情参见 [GB18030 字符集](/character-set-gb18030.md)
174177

175178
## TiDB 中的 `utf8``utf8mb4`
176179

@@ -519,9 +522,9 @@ SELECT VARIABLE_VALUE FROM mysql.tidb WHERE VARIABLE_NAME='new_collation_enabled
519522
1 row in set (0.00 sec)
520523
```
521524

522-
在新的排序规则框架下,TiDB 能够支持 `utf8_general_ci``utf8mb4_general_ci``utf8_unicode_ci``utf8mb4_unicode_ci``utf8mb4_0900_bin``utf8mb4_0900_ai_ci``gbk_chinese_ci``gbk_bin` 这几种排序规则,与 MySQL 兼容。
525+
在新的排序规则框架下,TiDB 能够支持 `utf8_general_ci``utf8mb4_general_ci``utf8_unicode_ci``utf8mb4_unicode_ci``utf8mb4_0900_bin``utf8mb4_0900_ai_ci``gbk_chinese_ci``gbk_bin``gb18030_chinese_ci``gb18030_bin` 这几种排序规则,与 MySQL 兼容。
523526

524-
使用 `utf8_general_ci``utf8mb4_general_ci``utf8_unicode_ci``utf8mb4_unicode_ci``utf8mb4_0900_ai_ci``gbk_chinese_ci` 中任一种时,字符串之间的比较是大小写不敏感 (case-insensitive) 和口音不敏感 (accent-insensitive) 的。同时,TiDB 还修正了排序规则的 `PADDING` 行为:
527+
使用 `utf8_general_ci``utf8mb4_general_ci``utf8_unicode_ci``utf8mb4_unicode_ci``utf8mb4_0900_ai_ci``gbk_chinese_ci``gb18030_chinese_ci` 中任一种时,字符串之间的比较是大小写不敏感 (case-insensitive) 和口音不敏感 (accent-insensitive) 的。同时,TiDB 还修正了排序规则的 `PADDING` 行为:
525528

526529
```sql
527530
CREATE TABLE t(a varchar(20) charset utf8mb4 collate utf8mb4_general_ci PRIMARY KEY);

character-set-gb18030.md

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
---
2+
title: GB18030 字符集
3+
summary: 本文介绍 TiDB 对 GB18030 字符集的支持情况。
4+
---
5+
6+
# GB18030 字符集
7+
8+
TiDB 从 v9.0.0 开始支持 GB18030-2022 字符集。本文档介绍 TiDB 对 GB18030 字符集的支持和兼容情况。
9+
10+
```sql
11+
SHOW CHARACTER SET WHERE CHARSET = 'gb18030';
12+
```
13+
14+
```
15+
+---------+---------------------------------+--------------------+--------+
16+
| Charset | Description | Default collation | Maxlen |
17+
+---------+---------------------------------+--------------------+--------+
18+
| gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 |
19+
+---------+---------------------------------+--------------------+--------+
20+
1 row in set (0.01 sec)
21+
```
22+
23+
```sql
24+
SHOW COLLATION WHERE CHARSET = 'gb18030';
25+
```
26+
27+
```
28+
+--------------------+---------+-----+---------+----------+---------+---------------+
29+
| Collation | Charset | Id | Default | Compiled | Sortlen | Pad_attribute |
30+
+--------------------+---------+-----+---------+----------+---------+---------------+
31+
| gb18030_bin | gb18030 | 249 | | Yes | 1 | PAD SPACE |
32+
| gb18030_chinese_ci | gb18030 | 248 | Yes | Yes | 1 | PAD SPACE |
33+
+--------------------+---------+-----+---------+----------+---------+---------------+
34+
2 rows in set (0.001 sec)
35+
```
36+
37+
## 与 MySQL 的兼容性
38+
39+
本节介绍 TiDB 中 GB18030 字符集与 MySQL 的兼容情况。
40+
41+
### 排序规则兼容性
42+
43+
MySQL 的 GB18030 字符集默认排序规则是 `gb18030_chinese_ci`。TiDB 的 GB18030 字符集的默认排序规则取决于 TiDB 配置项 [`new_collations_enabled_on_first_bootstrap`](/tidb-configuration-file.md#new_collations_enabled_on_first_bootstrap) 的值:
44+
45+
- 默认情况下,TiDB 配置项 `new_collations_enabled_on_first_bootstrap``true`,表示开启[新的排序规则框架](/character-set-and-collation.md#新框架下的排序规则支持)。此时,GB18030 字符集的默认排序规则是 `gb18030_chinese_ci`
46+
- 当 TiDB 配置项 `new_collations_enabled_on_first_bootstrap``false` 时,表示关闭新的排序规则框架,GB18030 字符集的默认排序规则是 `gb18030_bin`
47+
48+
另外,TiDB 支持的 `gb18030_bin` 与 MySQL 支持的 `gb18030_bin` 排序规则也不一致,TiDB 是将 GB18030 转换成 `utf8mb4`,然后再进行二进制排序。
49+
50+
开启新的排序规则框架后,如果查看 GB18030 字符集对应的排序规则,你可以看到 TiDB GB18030 默认排序规则已经切换为 `gb18030_chinese_ci`
51+
52+
```sql
53+
SHOW CHARACTER SET WHERE CHARSET = 'gb18030';
54+
```
55+
56+
```
57+
+---------+---------------------------------+--------------------+--------+
58+
| Charset | Description | Default collation | Maxlen |
59+
+---------+---------------------------------+--------------------+--------+
60+
| gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 |
61+
+---------+---------------------------------+--------------------+--------+
62+
1 row in set (0.01 sec)
63+
```
64+
65+
```sql
66+
SHOW COLLATION WHERE CHARSET = 'gb18030';
67+
```
68+
69+
```
70+
+--------------------+---------+-----+---------+----------+---------+---------------+
71+
| Collation | Charset | Id | Default | Compiled | Sortlen | Pad_attribute |
72+
+--------------------+---------+-----+---------+----------+---------+---------------+
73+
| gb18030_bin | gb18030 | 249 | | Yes | 1 | PAD SPACE |
74+
| gb18030_chinese_ci | gb18030 | 248 | Yes | Yes | 1 | PAD SPACE |
75+
+--------------------+---------+-----+---------+----------+---------+---------------+
76+
2 rows in set (0.00 sec)
77+
```
78+
79+
### 字符兼容性
80+
81+
- TiDB 支持 GB18030-2022 的字符,MySQL 支持 GB18030-2005 的字符,因此部分字符的编解码结果不同。
82+
83+
- 对于非法的 GB18030 字符,比如 `0xFE39FE39`,MySQL 支持以 16 进制的方式写入数据库中,并保存为 `?`。TiDB 在严格模式下读写非法 GB18030 字符都会报错;在非严格模式下,TiDB 允许读写非法 GB18030 字符但会返回警告。
84+
85+
### 其它
86+
87+
* 目前 TiDB 不支持通过 `ALTER TABLE` 语句将其它字符集类型改成 `gb18030` 或者从 `gb18030` 转成其它字符集类型。
88+
89+
* TiDB 不支持使用 `_gb18030` 字符集引导符。例如:
90+
91+
```sql
92+
CREATE TABLE t(a CHAR(10) CHARSET BINARY);
93+
Query OK, 0 rows affected (0.00 sec)
94+
INSERT INTO t VALUES (_gb18030'');
95+
ERROR 1115 (42000): Unsupported character introducer: 'gb18030'
96+
```
97+
98+
* 对于 `ENUM``SET` 类型中的二进制字符,TiDB 目前都会将其作为 `utf8mb4` 字符集处理。
99+
100+
## 组件兼容性
101+
102+
* TiFlash、TiDB Data Migration (DM) 和 TiCDC 目前不支持 GB18030 字符集。
103+
104+
*v9.0.0 之前,Dumpling 不支持导出 `charset=GB18030` 的表,TiDB Lightning 不支持导入 `charset=GB18030` 的表。
105+
106+
*v9.0.0 之前,TiDB Backup & Restore(BR)不支持备份恢复 `charset=GB18030` 的表。另外,任何版本的 BR 都不支持恢复 `charset=GB18030` 的表到 v9.0.0 之前的 TiDB 集群。
107+
108+
## 另请参阅
109+
110+
* [`SHOW CHARACTER SET`](/sql-statements/sql-statement-show-character-set.md)
111+
* [字符集和排序规则](/character-set-and-collation.md)

character-set-gbk.md

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
---
2-
title: GBK
2+
title: GBK 字符集
33
summary: 本文介绍 TiDB 对 GBK 字符集的支持情况。
44
---
55

6-
# GBK
6+
# GBK 字符集
77

88
TiDB 从 v5.4.0 开始支持 GBK 字符集。本文档介绍 TiDB 对 GBK 字符集的支持和兼容情况。
99

10-
从 TiDB v6.0.0 开始,[新的排序规则框架](/character-set-and-collation.md#新框架下的排序规则支持)默认启用,即 TiDB GBK 字符集的默认排序规则为 `gbk_chinese_ci`,与 MySQL 保持一致。
11-
1210
```sql
1311
SHOW CHARACTER SET WHERE CHARSET = 'gbk';
1412
```
@@ -17,23 +15,20 @@ SHOW CHARACTER SET WHERE CHARSET = 'gbk';
1715
+---------+-------------------------------------+-------------------+--------+
1816
| Charset | Description | Default collation | Maxlen |
1917
+---------+-------------------------------------+-------------------+--------+
20-
| gbk | Chinese Internal Code Specification | gbk_chinese_ci | 2 |
18+
| gbk | Chinese Internal Code Specification | gbk_bin | 2 |
2119
+---------+-------------------------------------+-------------------+--------+
2220
1 row in set (0.00 sec)
2321
```
2422

2523
```sql
2624
SHOW COLLATION WHERE CHARSET = 'gbk';
27-
```
28-
29-
```
3025
+----------------+---------+----+---------+----------+---------+---------------+
3126
| Collation | Charset | Id | Default | Compiled | Sortlen | Pad_attribute |
3227
+----------------+---------+----+---------+----------+---------+---------------+
3328
| gbk_bin | gbk | 87 | | Yes | 1 | PAD SPACE |
3429
| gbk_chinese_ci | gbk | 28 | Yes | Yes | 1 | PAD SPACE |
3530
+----------------+---------+----+---------+----------+---------+---------------+
36-
2 rows in set (0.00 sec)
31+
2 rows in set (0.001 sec)
3732
```
3833

3934
## 与 MySQL 的兼容性
@@ -47,7 +42,38 @@ MySQL 的 GBK 字符集默认排序规则是 `gbk_chinese_ci`。TiDB 的 GBK 字
4742
- 默认情况下,TiDB 配置项 [`new_collations_enabled_on_first_bootstrap`](/tidb-configuration-file.md#new_collations_enabled_on_first_bootstrap)`true`,表示开启[新的排序规则框架](/character-set-and-collation.md#新框架下的排序规则支持)。GBK 字符集的默认排序规则是 `gbk_chinese_ci`
4843
- 当 TiDB 配置项 [`new_collations_enabled_on_first_bootstrap`](/tidb-configuration-file.md#new_collations_enabled_on_first_bootstrap)`false` 时,表示关闭新的排序规则框架,GBK 字符集的默认排序规则是 `gbk_bin`
4944

50-
另外,TiDB 支持的 `gbk_bin` 与 MySQL 支持的 `gbk_bin` 排序规则不一致,TiDB 是将 GBK 转换成 `utf8mb4`,然后再进行二进制排序。
45+
另外,TiDB 支持的 `gbk_bin` 与 MySQL 支持的 `gbk_bin` 排序规则也不一致,TiDB 是将 GBK 转换成 `utf8mb4`,然后再进行二进制排序。
46+
47+
开启[新的排序规则框架](/character-set-and-collation.md#新框架下的排序规则支持)后,如果查看 GBK 字符集对应的排序规则,你可以看到 TiDB GBK 默认排序规则已经切换为 `gbk_chinese_ci`
48+
49+
从 TiDB v6.0.0 开始,新的排序规则框架默认启用,即 TiDB GBK 字符集的默认排序规则为 `gbk_chinese_ci`,与 MySQL 保持一致。
50+
51+
```sql
52+
SHOW CHARACTER SET WHERE CHARSET = 'gbk';
53+
```
54+
55+
```
56+
+---------+-------------------------------------+-------------------+--------+
57+
| Charset | Description | Default collation | Maxlen |
58+
+---------+-------------------------------------+-------------------+--------+
59+
| gbk | Chinese Internal Code Specification | gbk_chinese_ci | 2 |
60+
+---------+-------------------------------------+-------------------+--------+
61+
1 row in set (0.00 sec)
62+
```
63+
64+
```sql
65+
SHOW COLLATION WHERE CHARSET = 'gbk';
66+
```
67+
68+
```
69+
+----------------+---------+----+---------+----------+---------+---------------+
70+
| Collation | Charset | Id | Default | Compiled | Sortlen | Pad_attribute |
71+
+----------------+---------+----+---------+----------+---------+---------------+
72+
| gbk_bin | gbk | 87 | | Yes | 1 | PAD SPACE |
73+
| gbk_chinese_ci | gbk | 28 | Yes | Yes | 1 | PAD SPACE |
74+
+----------------+---------+----+---------+----------+---------+---------------+
75+
2 rows in set (0.001 sec)
76+
```
5177

5278
### 非法字符兼容性
5379

dm/dm-overview.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ tiup install dm dmctl
5252

5353
- DM 不会将视图的 DDL 语句同步到下游的 TiDB 集群,也不会将针对视图的 DML 语句同步到下游。在该场景下,建议用户在下游 TiDB 集群中自行创建视图。
5454

55-
+ GBK 字符集兼容性限制
55+
+ GBK 和 GB18030 字符集兼容性限制
5656

57-
- DM 在 v5.4.0 之前不支持将 `charset=GBK` 的表迁移到 TiDB。
57+
- DM 在 v5.4.0 之前不支持将 `charset=GBK` 的表迁移到 TiDB,在 v9.0.0 之前不支持将 `charset=GB18030` 的表迁移到 TiDB
5858

5959
+ Binlog 兼容性限制
6060

information-schema/information-schema-character-sets.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,13 @@ SELECT * FROM `CHARACTER_SETS`;
4040
+--------------------+----------------------+-------------------------------------+--------+
4141
| ascii | ascii_bin | US ASCII | 1 |
4242
| binary | binary | binary | 1 |
43+
| gb18030 | gb18030_chinese_ci | China National Standard GB18030 | 4 |
4344
| gbk | gbk_chinese_ci | Chinese Internal Code Specification | 2 |
4445
| latin1 | latin1_bin | Latin1 | 1 |
4546
| utf8 | utf8_bin | UTF-8 Unicode | 3 |
4647
| utf8mb4 | utf8mb4_bin | UTF-8 Unicode | 4 |
4748
+--------------------+----------------------+-------------------------------------+--------+
48-
6 rows in set (0.00 sec)
49+
7 rows in set (0.00 sec)
4950
```
5051

5152
`CHARACTER_SETS` 表中列的含义如下:

migrate-from-mariadb.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,14 @@ TiDB 不支持 MariaDB 中常用的 `latin1_swedish_ci` 排序规则。
192192
SHOW COLLATION;
193193
```
194194

195-
```
195+
```sql
196196
+--------------------+---------+-----+---------+----------+---------+---------------+
197197
| Collation | Charset | Id | Default | Compiled | Sortlen | Pad_attribute |
198198
+--------------------+---------+-----+---------+----------+---------+---------------+
199199
| ascii_bin | ascii | 65 | Yes | Yes | 1 | PAD SPACE |
200200
| binary | binary | 63 | Yes | Yes | 1 | NO PAD |
201+
| gb18030_bin | gb18030 | 249 | | Yes | 1 | PAD SPACE |
202+
| gb18030_chinese_ci | gb18030 | 248 | Yes | Yes | 1 | PAD SPACE |
201203
| gbk_bin | gbk | 87 | | Yes | 1 | PAD SPACE |
202204
| gbk_chinese_ci | gbk | 28 | Yes | Yes | 1 | PAD SPACE |
203205
| latin1_bin | latin1 | 47 | Yes | Yes | 1 | PAD SPACE |
@@ -210,7 +212,7 @@ SHOW COLLATION;
210212
| utf8mb4_general_ci | utf8mb4 | 45 | | Yes | 1 | PAD SPACE |
211213
| utf8mb4_unicode_ci | utf8mb4 | 224 | | Yes | 8 | PAD SPACE |
212214
+--------------------+---------+-----+---------+----------+---------+---------------+
213-
13 rows in set (0.00 sec)
215+
15 rows in set (0.000 sec)
214216
```
215217

216218
执行下列语句检查当前表的列使用的排序规则:

0 commit comments

Comments
 (0)