更新时间:2024-08-20 GMT+08:00

表级字符集和字符序

设置表的默认字符集和默认字符序。

CREATE TABLE table_name (column_list)
    [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ]
    [ [DEFAULT] COLLATE [ = ] default_collation ]

修改表的默认字符集和默认字符序,修改不会影响表中当前已经存在的列。

ALTER TABLE table_name
    [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ]
    [ [DEFAULT] COLLATE [ = ] default_collation ]

修改表的默认字符集和默认字符序为指定的值,同时将表中的所有字符类型的字段的字符集和字符序设置为指定的值,并将字段里的数据转换为新字符集编码。

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,则使用该表所在的模式的默认字符集和默认字符序作为表的默认字符集和表的默认字符序。

  • default_charset仅支持指定为带有默认字符序的字符集,如果指定的字符集没有默认字符序则报错。

  • default_collation仅支持指定为B模式(即sql_compatibility = 'B')下的字符序,指定其他字符序报错。

  • 如果表的默认字符序为binary,则表中未指定字符序的文本类型会转换为对应的二进制类型,且字符序设置为binary。

  • 暂不支持设置表的默认字符集与数据库的server_encoding不同。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
-- 仅设置字符集,字符序为字符集的默认字符序。
gaussdb=# CREATE TABLE test(c1 text) CHARSET utf8;

-- 仅设置字符序,字符集为字符序关联的字符集。
gaussdb=# CREATE TABLE test(c1 text) COLLATE utf8_bin;

-- 同时设置字符集与字符序,字符集和字符序需对应。
gaussdb=# CREATE TABLE test(c1 text)  CHARSET utf8 COLLATE utf8_bin;

-- 将表中字符类型字段的数据转化为utf8mb4编码,并设置表和字段的字符序为utf8mb4_bin。
gaussdb=# ALTER TABLE test CONVERT TO CHARSET utf8mb4 COLLATE utf8mb4_bin;

-- 修改表的默认字符集为utf8mb4,默认字符序为utf8mb4_bin。
gaussdb=# ALTER TABLE test CHARSET utf8mb4 COLLATE utf8mb4_bin;