-
字符类型表达式的字符集和字符序 每一个字符类型的表达式含有字符集和字符序属性。 在B模式(即sql_compatibility = 'B')的数据库下,如果设置参数b_format_version='5.7'和b_format_dev_version='s2'时, 字符串常量的默认字符集与字符序由系统参数character_set_connection和collation_connection决定。否则,其默认字符集与数据库字符集server_encoding相同,其默认字符序为default。 字符集语法:
GaussDB 暂不支持指定字符串常量的字符集语法。 1 [_charset_name]'string'
字符序语法: 其他字符串类型的表达式也可以指定字符序。 1 expression [COLLATE collation_name]
语法说明: COLLATE collation_name 指定字符序的名称,用于设置这个字符串的字符序属性。 表达式的数据类型只能是支持字符序的数据类型。 指定的字符序必须是表达式的字符集允许的字符序。 示例: 1
2 --使用collate语句指定字符序。
gaussdb=# SELECT 'a' COLLATE utf8mb4_general_ci = 'A';
父主题: 字符集与字符序
-
表级字符集和字符序 设置表的默认字符集和默认字符序,创建表操作请参见CREATE TABLE。 CREATE TABLE table_name (column_list)
[ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ]
[ [DEFAULT] COLLATE [ = ] default_collation ] 修改表的默认字符集和默认字符序,修改不会影响表中当前已经存在的列,修改表操作请参见ALTER TABLE。 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;
父主题: 字符集与字符序
-
数据库级字符集和字符序 创建一个新的数据库时,可以指定数据库的字符集字符序,创建数据库操作请参见CREATE DATABASE。 CREATE DATABASE [IF NOT EXISTS] database_name
[ ENCODING [=] encoding ] |
[ LC_COLLATE [=] lc_collate ] |
[ LC_CTYPE [=] lc_ctype ] |; 语法说明: database_name 数据库名称。 取值范围:字符串,要符合标识符的命名规范。 ENCODING [ = ] encoding 指定数据库使用的字符编码,可以是字符串(如'SQL_ASCII')、整数编号。 LC_COLLATE [ = ] ‘lc_collate’ 指定新数据库使用的字符集。例如,通过lc_collate = 'zh_CN.gbk'设定该参数。 该参数的使用会影响到对字符串的排序(如使用ORDER BY执行,以及在文本列上使用索引的顺序)。默认是使用模板数据库的排序。 取值范围:操作系统支持的字符集。 LC_CTYPE [ = ] ‘lc_ctype’ 指定新数据库使用的字符分类。例如,通过lc_ctype = 'zh_CN.gbk'设定该参数。该参数的使用会影响到字符的分类,如大写、小写和数字。默认是使用模板数据库的字符分类。 取值范围:操作系统支持的字符分类。 数据库级字符集、字符序语法所有模式均可使用,详细语法请参见CREATE DATABASE。 LC_COLLATE/LC_CTYPE语法不支持指定B模式特有的字符序,参数的取值范围取决于本地环境支持的字符集,可通过locale -a查看。 父主题: 字符集与字符序
-
列级字符集字符序 每个字符串类型(即类型为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仅支持指定为B模式下的字符序,指定其他字符序报错。 如果表字段为文本类型且指定的字符序为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);
父主题: 字符集与字符序
-
客户端连接的字符集和字符序 含有字符集属性的数据在服务端和客户端之间会自动转换编码。服务端接收到客户端发送的SQL语句后,会将其由客户端字符集client_encoding向数据库字符集server_encoding转换编码。查询结果数据发送到客户端之前也会将数据向客户端字符集character_set_results转换编码。 系统参数说明 server_encoding 创建数据库时指定的字符集,详见CREATE DATABASE章节。 client_encoding 客户端的字符集,可以通过SET NAMES语句修改,详见SET章节。 character_set_connection SQL语句中未指定字符集的字符串常量的默认字符集。 collation_connection SQL语句中未指定字符序的字符串常量的默认字符序。 character_set_results 返回结果的字符集。 对于一个非字符类型对象转换为字符类型的表达式,其结果的字符集和字符序为character_set_connection和collation_connection。 字符类型的绑定参数的字符集和字符默认为系统参数character_set_connection和collation_connection设置的值,绑定参数输入任何值将认作上述字符集。 字符数据转换编码的过程中会校验字符的编码,如果不符合,将会抛出异常。 父主题: 字符集与字符序
-
模式级字符集和字符序 创建模式并指定默认字符集和字符序,创建模式请参见CREATE SCHEMA。 CREATE SCHEMA schema_name
[ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ]
[ [DEFAULT] COLLATE [ = ] default_collation ]; 修改模式的默认字符集、字符序属性,修改模式请参见ALTER SCHEMA。 ALTER SCHEMA schema_name
[ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [DEFAULT] COLLATE [ = ] default_collation ]; 语法说明: schema_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')下的字符序,指定其他字符序报错。 暂不支持创建新SCHEMA的字符集与数据库的server_encoding不同。 示例: 1
2
3
4
5
6
7
8
9
10
11 -- 仅设置字符集,字符序为字符集的默认字符序。
gaussdb=# CREATE SCHEMA test CHARSET utf8;
-- 仅设置字符序,字符集为字符序关联的字符集。
gaussdb=# CREATE SCHEMA test COLLATE utf8_bin;
-- 同时设置字符集与字符序,字符集和字符序需对应。
gaussdb=# CREATE SCHEMA test CHARSET utf8 COLLATE utf8_bin;
-- 将test的默认字符集修改为utf8mb4,默认字符序修改为utf8mb4_bin。
gaussdb=# ALTER SCHEMA test CHARSET utf8mb4 COLLATE utf8mb4_bin;
父主题: 字符集与字符序
-
表级字符集和字符序 设置表的默认字符集和默认字符序,创建表操作请参见CREATE TABLE。 CREATE TABLE table_name (column_list)
[ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ]
[ [DEFAULT] COLLATE [ = ] default_collation ] 修改表的默认字符集和默认字符序,修改不会影响表中当前已经存在的列,修改表操作请参见ALTER TABLE。 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仅支持指定为MYSQL模式(即sql_compatibility = 'MYSQL')下的字符序,指定其他字符序报错。 如果表的默认字符序为binary ,则表中未指定字符序的文本类型会转换为对应的二进制类型,且字符序设置为binary。 暂不支持设置表的默认字符集和默认字符序与数据库的server_encoding不同。 暂不支持将表中字符类型字段的数据转化编码。 示例: 1
2
3
4
5
6
7
8
9
10
11 -- 仅设置字符集,字符序为字符集的默认字符序
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 CHARSET utf8mb4 COLLATE utf8mb4_bin;
父主题: 字符集与字符序
-
字符类型表达式的字符集和字符序 每一个字符类型的表达式含有字符集和字符序属性。 在MYSQL模式(即sql_compatibility = 'MYSQL')的数据库下,如果设置参数b_format_version='5.7'和b_format_dev_version='s2'时,字符串常量的默认字符集与字符序由系统参数character_set_connection和collation_connection决定。否则,其默认字符集与数据库字符集server_encoding相同,其默认字符序为default。 字符集语法: GaussDB暂不支持以下语法指定字符串常量的字符集。 1 [_charset_name]'string'
字符序语法: 其他字符串类型的表达式也可以指定字符序。 1 EXPRESSION [COLLATE collation_name]
参数说明: COLLATE collation_name 指定字符序的名称,用于设置这个字符串的字符序属性。 表达式的数据类型只能是支持字符序的数据类型。 指定的字符序必须是表达式的字符集允许的字符序。 示例: 1
2 --使用collate语句指定字符序
gaussdb=# SELECT 'a' COLLATE utf8mb4_general_ci = 'A';
父主题: 字符集与字符序
-
模式级字符集和字符序 创建模式并指定默认字符集和字符序,创建模式请参见CREATE SCHEMA。 CREATE SCHEMA schema_name
[ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ]
[ [DEFAULT] COLLATE [ = ] default_collation ]; 修改模式的默认字符集、字符序属性,修改模式请参见ALTER SCHEMA。 ALTER SCHEMA schema_name
[ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [DEFAULT] COLLATE [ = ] default_collation ]; 参数说明: schema_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仅支持指定为MYSQL模式(即sql_compatibility = 'MYSQL')下的字符序,指定其他字符序报错。 暂不支持新建SCHEMA的字符集、字符序与数据库的server_encoding不同。 示例: 1
2
3
4
5
6
7
8
9
10
11 -- 仅设置字符集,字符序为字符集的默认字符序
gaussdb=# CREATE SCHEMA test CHARSET utf8;
-- 仅设置字符序,字符集为字符序关联的字符集
gaussdb=# CREATE SCHEMA test COLLATE utf8_bin;
-- 同时设置字符集与字符序,字符集和字符序需对应
gaussdb=# CREATE SCHEMA test CHARSET utf8 COLLATE utf8_bin;
-- 将test的默认字符集修改为utf8mb4,默认字符序修改为utf8mb4_bin。
gaussdb=# ALTER SCHEMA test CHARSET utf8mb4 COLLATE utf8mb4_bin;
父主题: 字符集与字符序
-
客户端连接的字符集和字符序 含有字符集属性的数据在服务端和客户端之间会自动转换编码。服务端接收到客户端发送的SQL语句后,会将其由客户端字符集client_encoding向数据库字符集server_encoding转换编码。查询结果数据发送到客户端之前也会将数据向客户端字符集client_encoding转换编码。 系统参数说明 server_encoding 创建数据库时指定的字符集,详见CREATE DATABASE章节。 client_encoding 客户端的字符集,可以通过SET NAMES语句修改,详见SET章节。 character_set_connection SQL语句中未指定字符集的字符串常量的默认字符集。 collation_connection SQL语句中未指定字符序的字符串常量的默认字符序。 character_set_results 返回结果的字符集。 对于一个非字符类型对象转换为字符类型的表达式,其结果的字符集和字符序为character_set_connection和collation_connection。 字符类型的绑定参数的字符集和字符默认为系统参数character_set_connection和collation_connection设置的值。 字符数据转换编码的过程中会校验字符的编码,如果不符合,将会提示异常,返回ERROR信息。 父主题: 字符集与字符序
-
列级字符集字符序 每个字符串类型(即类型为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);
父主题: 字符集与字符序