更新时间:2022-08-16 GMT+08:00

如何修改数据库的字符编码格式?

GaussDB(DWS)默认不支持修改已创建好的某个数据库的字符编码格式,为了适应全球化的需求,使数据库编码能够存储与表示绝大多数的字符,建议创建Database的时候使用UTF8编码。如果数据库已创建,则无法修改字符编码格式,需要重新创建数据库。

语法格式

1
2
3
4
5
6
7
8
CREATE DATABASE database_name
    [ [ WITH ] { [ OWNER [=] user_name ] |
               [ TEMPLATE [=] template ] |
               [ ENCODING [=] encoding ] |
               [ LC_COLLATE [=] lc_collate ] |
               [ LC_CTYPE [=] lc_ctype ] |
               [ DBCOMPATIBILITY [=] compatibility_type ] |
               [ CONNECTION LIMIT [=] connlimit ]}[...] ];
  • TEMPLATE [ = ] template

    模板名。即从哪个模板创建新数据库。GaussDB(DWS)采用从模板数据库复制的方式来创建新的数据库。初始时,GaussDB(DWS)包含两个模板数据库template0、template1,以及一个默认的用户数据库gaussdb

    取值范围:已有数据库的名称。不指定时,系统默认拷贝template1。另外,不支持指定为gaussdb数据库。

    目前不支持模板库中含有SEQUENCE对象。如果模板库中有SEQUENCE,则会创建数据库失败。

  • ENCODING [ = ] encoding

    指定数据库使用的字符编码,可以是字符串(如'SQL_ASCII')、整数编号。

    不指定时,默认使用模版数据库的编码。模板数据库template0和template1的编码默认与操作系统环境相关。template1不允许修改字符编码,因此若要变更编码,请使用template0创建数据库。

    常用取值:GBK、UTF8、Latin1。

    指定新的数据库字符集编码必须与所选择的本地环境中(LC_COLLATE和LC_CTYPE)的设置兼容。

    当指定的字符编码集为GBK时,部分中文生僻字无法直接作为对象名。这是因为GBK第二个字节的编码范围在0x40-0x7E之间时,字节编码与ASCII字符@A-Z[\]^_`a-z{|}重叠。其中@[\]^_'{|}是数据库中的操作符,直接作为对象名时,会语法报错。例如“侤”字,GBK16进制编码为0x8240,第二个字节为0x40,与ASCII“@”符号编码相同,因此无法直接作为对象名使用。如果确实要使用,可以在创建和访问对象时,通过增加双引号来规避这个问题。

示例

例如,创建一个UTF8编码的数据库music(本地环境的编码格式必须也为UTF8)。

CREATE DATABASE music ENCODING 'UTF8' template = template0;