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

列级字符集字符序

每个字符串类型(即类型为CHAR 、VARCHAR、 TEXT等字符串类型)的列都可以设置列的字符集和列的字符序。

CREATE TABLE table_name (
    column_name data_type
	[ CHARACTER SET | CHARSET charset ]
    [ COLLATE collation ]
);

语法说明:

  • table_name

    表名称。

  • data_type

    字段的数据类型,字符串类型支持字符集、字符序语法。

  • CHARACTER SET | CHARSET charset

    指定表字段的字符集,单独指定时会将字段的字符序设置为指定字符集的默认字符序。

  • COLLATE collation

    COLLATE子句指定列的字符序(该列的数据类型必须支持字符序)。如果没有指定,则使用默认的排序规则。

GaussDB通过以下方式选择表字段的字符集和字符序:

  • 如果同时指定了charset和collation,则使用字符集charset和字符序collation ,且charset和collation需要对应,不对应会产生报错。

  • 如果仅指定了charset,则使用字符集 charset 及其默认字符序。

  • 如果仅指定了collation,则使用与collation关联的字符集和指定的字符序。

  • 如果既不指定charset也不指定collation,则使用表的默认字符集和默认字符序。

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

  • default_collation仅支持指定为MYSQL模式下的字符序,指定其他字符序报错。

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

  • 分区表的分区键的字符集必须与数据库字符集相同。

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

示例:

1
2
3
4
5
6
7
8
-- 仅设置字符集,字符序为字符集的默认字符序
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);