
# 如何查看和设置DWS数据库的字符集编码格式
#### 查看数据库字符集编码
使用server_encoding参数查看当前数据库的字符集编码。例如，查看到数据库music的字符集编码为UTF8。
```
music=> SHOW server_encoding;
 server_encoding
-----------------
 UTF8
(1 row)
```
#### 设置数据库的字符集编码
![](https://support.huaweicloud.com/dws_faq/public_sys-resources/note_3.0-zh-cn.png)
DWS不支持修改已创建数据库的字符编码格式。
如果需要指定数据库的字符集编码格式，可按照下面的CREATE DATABASE语法格式，使用template0新建一个数据库。为了适应全球化的需求，使数据库编码能够存储与表示绝大多数的字符，建议创建Database的时候使用UTF8编码。
#### CREATE DATABASE语法格式
```
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**
  模板名。即从哪个模板创建新数据库。DWS采用从模板数据库复制的方式来创建新的数据库。初始时，DWS包含两个模板数据库template0、template1，以及一个默认的用户数据库gaussdb。
  取值范围：已有数据库的名称。不指定时，系统默认复制template1。另外，不支持指定为gaussdb数据库。
  ![](https://support.huaweicloud.com/dws_faq/public_sys-resources/notice_3.0-zh-cn.png)
  目前不支持模板库中含有SEQUENCE对象。如果模板库中有SEQUENCE，则会创建数据库失败。
  
- **ENCODING \[ = \] encoding**
  指定数据库使用的字符编码，可以是字符串（如'SQL_ASCII'）、整数编号。
  不指定时，默认使用模板数据库的编码。模板数据库template0和template1的编码默认与操作系统环境相关。template1不允许修改字符编码，因此若要变更编码，请使用template0创建数据库。
  常用取值：GBK、UTF8、Latin1。
  ![](https://support.huaweicloud.com/dws_faq/public_sys-resources/notice_3.0-zh-cn.png)
  指定新的数据库字符集编码必须与所选择的本地环境中（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;
```
