GaussDB 数据库字符编码与兼容模式
一、问题现象
华为云GaussDB数据库兼容4种数据库类型,在创建数据库之前要确认清楚兼容数据库的类型与字符编码。比如在mysql5.7以上支持insert on duplicate key update SQL语法,若在GaussDB集中式环境创建数据库时默认为O数据库,针对O类型数据库不支持上面mysql5.7 SQL语法,执行时会产生SQL错误,这篇技术文章为了详细说明GaussDB支持的兼容数据库与字符编码。
二、技术背景
GaussDB创建一个新的数据库。缺省情况下新数据库将通过复制标准系统数据库template0来创建,且仅支持使用template0来创建。
场景1:集中式创建库语法:
CREATE DATABASE database_name[ [ WITH ] { [ OWNER [=] user_name ] |[ TEMPLATE [=] template ] |[ ENCODING [=] 'encoding' ] |[ LC_COLLATE [=] 'lc_collate' ] |[ LC_CTYPE [=] 'lc_ctype' ] |[ DBCOMPATIBILITY [=] 'compatibilty_type' ] |[ TABLESPACE [=] tablespace_name ] |[ CONNECTION LIMIT [=] connlimit ] |[ DBTIMEZONE [=] 'time_zone' ]}[...] ];
ENCODING参数为可选,指定数据库使用的字符编码,可以是字符串(如'SQL_ASCII')、整数编号。不指定时,默认使用模版数据库的编码。模板数据库template0和template1的编码默认与操作系统环境相关。template1不允许修改字符编码,因此若要变更编码,请使用template0创建数据库。常用取值:GBK、UTF8、Latin1、GB18030等,具体支持的字符集如下。
名称 | 描述 | 语言 | 是否服务器端? | ICU(International Components for Unicode)? | 字节/字符 | 别名 |
---|---|---|---|---|---|---|
BIG5 | Big Five | 繁体中文 | 否 | 否 | 1-2 | WIN950, Windows950 |
EUC_CN | 扩展UNIX编码-中国 | 简体中文 | 是 | 是 | 1-3 | - |
EUC_JP | 扩展UNIX编码-日本 | 日文 | 是 | 是 | 1-3 | - |
EUC_JIS_2004 | 扩展UNIX编码-日本, JIS X 0213 | 日文 | 是 | 否 | 1-3 | - |
EUC_KR | 扩展UNIX编码-韩国 | 韩文 | 是 | 是 | 1-3 | - |
EUC_TW | 扩展UNIX编码-中国台湾 | 繁体中文 | 是 | 是 | 1-3 | - |
GB18030 |