
# 表级字符集和字符序
设置表的默认字符集和默认字符序。
```
CREATE TABLE table_name (column_list)
    [ [DEFAULT] {CHARACTER SET | CHAR SET | CHARSET}[ = ] default_charset ]
    [ [DEFAULT] COLLATE [ = ] default_collation ]
```
修改表的默认字符集和默认字符序，修改不会影响表中当前已经存在的列。
```
ALTER TABLE table_name
    [ [DEFAULT] {CHARACTER SET | CHAR SET | CHARSET}[ = ] default_charset ]
    [ [DEFAULT] COLLATE [ = ] default_collation ]
```
![](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
暂不支持修改表的默认字符集和默认字符序为指定的值，同时将表中的所有字符类型的字段的字符集和字符序设置为指定的值，并将字段里的数据转换为新字符集编码。语法如下：
```
ALTER TABLE table_name
    CONVERT TO CHARACTER SET | CHARSET charset [ COLLATE collation ]
```
**参数说明**
- **table_name**
  表名称。
  
- **default_charset**
  指定表的默认字符集，单独指定时会将表的默认字符序设置为指定的字符集的默认字符序。
  
- **default_collation**
  指定表的默认字符序，单独指定时会将表的默认字符集设置为指定的字符序对应的字符集。
  
GaussDB通过以下方式选择表的字符集和字符序：
- 如果同时指定了default_charset和default_collation，则使用字符集default_charset和字符序default_collation，且default_charset和default_collation需要对应，不对应会产生报错。
  
- 如果仅指定了default_charset，则使用字符集default_charset及其默认字符序。
  
- 如果仅指定了default_collation，则使用default_collation字符序和其对应的字符集。
  
- 如果既不指定default_charset也不指定default_collation，则使用该表所在的模式的默认字符集和默认字符序作为表的默认字符集和表的默认字符序。
  
![](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- default_charset仅支持指定为带有默认字符序的字符集，如果指定的字符集没有默认字符序则报错。
- default_collation仅支持[支持的字符序](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/gaussdb-81-0032.html#ZH-CN_TOPIC_0000002558805261__zh-cn_topic_0000002526893606_zh-cn_topic_0000001736245100_section1187752712414)中的字符序，指定其他字符序报错。
- 如果表的默认字符序为BINARY ，则表中未指定字符序的文本类型会转换为对应的二进制类型，且字符序设置为BINARY。
- 除BINARY字符集、字符序外，暂不支持设置表默认字符集与库级的字符集、字符序不同。
- 暂不支持将表中字符类型字段的数据转化编码。
- 外键与外键引用列字符序不同时，禁止创建外键。
- 如果表或者列上有外键/外键引用列时，无法转换/modify字符集/字符序。
 
**示例：**
```
-- 仅设置字符集，字符序为字符集的默认字符序
m_db=# CREATE TABLE test(c1 text) CHARSET utf8;
-- 仅设置字符序，字符集为字符序关联的字符集
m_db=# CREATE TABLE test(c1 text) COLLATE utf8_bin;
-- 同时设置字符集与字符序，字符集和字符序需对应
m_db=# CREATE TABLE test(c1 text)  CHARSET utf8 COLLATE utf8_bin;
-- 修改表的默认字符集为utf8mb4，默认字符序为utf8mb4_bin
m_db=# ALTER TABLE test CHARSET utf8mb4 COLLATE utf8mb4_bin;
-- 删除表
m_db=# DROP TABLE test;
```
