GaussDB 数据库字符编码与兼容模式

举报
开发者空间小蜜蜂 发表于 2024/11/27 17:36:46 2024/11/27
【摘要】 使用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等,具体支持的字符集如下。

1 GaussDB KernelopenGaussGaussDB字符集

名称

描述

语言

是否服务器端

ICUInternational 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

国家标准

中文

1-4

-

GB18030_2022

国家标准

中文

1-4

-

GBK

扩展国家标准

简体中文

1-2

WIN936, Windows936

ISO_8859_5

ISO 8859-5, ECMA 113

拉丁语/西里尔语

1

-

ISO_8859_6

ISO 8859-6, ECMA 114

拉丁语/阿拉伯语

1

-

ISO_8859_7

ISO 8859-7, ECMA 118

拉丁语/希腊语

1

-

LATIN8

ISO 8859-14

凯尔特语

1

ISO885914

LATIN9

ISO 8859-15

带欧罗巴和口音的LATIN1

1

ISO885915

LATIN10

ISO 8859-16, ASRO SR 14111

罗马尼亚语

1

ISO885916

MULE_INTERNAL

Mule内部编码

多语种编辑器

1-4

-

SJIS

Shift JIS

日语

1-2

Mskanji, ShiftJIS, WIN932, Windows932

SHIFT_JIS_2004

Shift JIS, JIS X 0213

日语

1-2

-

SQL_ASCII

未指定(见文本)

任意

1

-

UHC

统一韩语编码

韩语

1-2

WIN949, Windows949

UTF8

Unicode, 8-bit

所有

1-4

Unicode

WIN866

Windows CP866

西里尔语

1

ALT

WIN874

Windows CP874

泰语

1

-

WIN1250

Windows CP1250

中欧

1

-

WIN1251

Windows CP1251

西里尔语

1

WIN

WIN1252

Windows CP1252

西欧

1

-

WIN1253

Windows CP1253

希腊语

1

-

WIN1254

Windows CP1254

土耳其语

1

-

WIN1255

Windows CP1255

希伯来语

1

-

WIN1256

Windows CP1256

阿拉伯语

1

-

WIN1257

Windows CP1257

波罗的海

1

-

WIN1258

Windows CP1258

越南语

1

ABC, TCVN, TCVN5712, VSCII

ZHS16GBK

扩展国家标准

简体中文

1-2

-


DBCOMPATIBILITY 可选参数。指定兼容的数据库的类型,默认兼容O。取值范围:A、B、C、PG。分别表示兼容O、MY、TD和POSTGRES。

场景2:分布式GausssDB创建库语法

创建库语法跟集式式是一样的,支持的字符编码也一样。区别在于DBCOMPATIBILITY兼容性参数值不一样:DBCOMPATIBILITY也为可选参数,指定兼容的数据库的类型,默认兼容MySQL。取值范围:MYSQL、TD、ORA、PG。分别表示兼容MySQL、TD(Teradata)、Oracle和PostgreSQL。

三、处理过程

因业务需求分别在GaussDB集中式与分布式环境下,创建GB18030的字符编码并且兼容Oracle数据库,本实例以fx为库名,处理过程以下:

集中式:

[omm@db01 ~]$ gsql -d postgres -p 30100  -ar
gaussdb=# create database fx encoding 'GB18030' dbcompatibility='A';
CREATE DATABASE
gaussdb=# select datname, pg_encoding_to_char(encoding),datcompatibility from pg_database where  datname='fx';
 datname | pg_encoding_to_char | datcompatibility
---------+---------------------+------------------
 fx      | GB18030             | A
(1 row)
gaussdb=#

分布式:

gaussdb=> create database fx encoding 'GB18030' dbcompatibility='ORA';
CREATE DATABASE
gaussdb=> select datname, pg_encoding_to_char(encoding),datcompatibility from pg_database where  datname='fx';
 datname | pg_encoding_to_char | datcompatibility
---------+---------------------+------------------
 fx      | GB18030             | ORA
(1 row)

gaussdb=>

四、总结

使用GaussDB数据库创建数据库前,需要按照业务场景确认数据库采用的字符编码与数据库兼容模式,特别是在做应用适配时确认源库的字符编码与源库的数据类型。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。