暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB A 配置字符集

墨天轮 2019-10-12
4144

配置字符集

在创建数据库的时候是可以修改默认字符集,考虑到这个参数的重要性,在此单独对这个参数进行详细说明。

相关概念

字符集(编码格式):

  • GaussDB 200支持GBK、UTF-8和Latin1编码格式。
  • 在创建数据库的时候是可以修改默认字符集。因此,多个数据库可以设置为不同的字符集。

背景信息

在使用GaussDB 200过程中,服务端和客户端都可以设置字符集。由于服务端与客户端可以设置为不同的字符集,所以两者字符集中单个字符的长度也会不同,所以产生的最终结果可能会与预期不一致。如果服务端与客户端设置为不同的字符集,则客户端输入的字符串会以服务端字符集的格式进行处理,很有可能产生与预期不一致的结果。

表1 客户端和服务端设置字符集的输出结果对比

操作过程

服务端和客户端编码一致

服务端和客户端编码不一致

存入和取出过程中没有对字符串进行操作

输出预期结果

输出预期结果(输入与显示的客户端编码必须一致)。

存入取出过程对字符串有做一定的操作(如字符串函数操作)

输出预期结果

根据对字符串具体操作可能产生非预期结果。

存入过程中对超长字符串有截断处理

输出预期结果

字符集中字符编码长度是否一致,如果不一致可能会产生非预期的结果。

上述字符串函数操作和自动截断产生的效果会有叠加效果,例如:在客户端与服务端字符集不一致的场景下,如果既有字符串操作,又有字符串截断,在字符串被处理完以后的情况下继续截断,这样也会产生非预期的效果。详细的示例请参见表2。

使用如下命令建立示例中需要使用的表table1、table2。

CREATE TABLE table1(id int, a char(6), b varchar(6),c varchar(6)); CREATE TABLE table2(id int, a char(20), b varchar(20),c varchar(20));
表2 示例

编号

服务端字符集

客户端字符集

是否启用自动截断

示例

结果

说明

1

SQL_ASCII

UTF8

insert into table1 values(1,reverse('123AA78'),reverse('123AA78'),reverse('123AA78'));
id |a|b|c ----+------+------+------ 1 | 87| 87| 87

字符串在服务端翻转后,并进行截断,由于服务端和客户端的字符集不一致,字符A在客户端由多个字节表示,结果产生异常。

2

SQL_ASCII

UTF8

insert into table1 values(2,reverse('123A78'),reverse('123A78'),reverse('123A78'));
id |a|b|c ----+------+------+------ 2 | 873| 873| 873

字符串翻转后,又进行了自动截断,所以产生了非预期的效果。

3

SQL_ASCII

UTF8

insert into table1 values(3,'87AA123','87AA123','87AA123');
id |a|b|c ----+------+------+------ 3 | 87A | 87A | 87A

字符串类型的字段长度是客户端字符编码长度的整数倍,所以截断后产生结果正常。

4

SQL_ASCII

UTF8

insert into table2 values(1,reverse('123AA78'),reverse('123AA78'),reverse('123AA78')); insert into table2 values(2,reverse('123A78'),reverse('123A78'),reverse('123A78'));
id |a|b|c ----+-------------------+--------+-------- 1 | 87?321| 87?321 | 87?321 2 | 87321| 87321| 87321

与示例1类似,多字节字符翻转之后不再表示原来的字符。

规划原则和方法

规划字符集,选择原则和设置方法请参见表3。
表3 字符集

字符集

规划原则

设置方法

GBK

如果数据库只需要支持中文,数据量很大,性能要求也很高,那就应该选择双字节定长编码的中文字符集。对GaussDB 200来说,目前只能选择GBK 。

  • 在安装数据库时指定初始化参数-E。
  • 通过SQL语句创建数据库时指定ENCODING参数。

UTF-8

如果应用程序要处理各种各样的文字,或者将处理结果发布到使用不同语言的国家或地区,就应该选择Unicode字符集。对GaussDB 200来说,目前只能选择UTF-8 。

Latin1

如果数据库只需要支持ASCII收录的字符、西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号,则可以选择Latin1。

说明:

GaussDB 200支持字符集的多种写法:gbk/GBK、UTF-8/UTF8/uft8/utf-8和Latine1/latine1。

示例

使用SQL语句创建数据库时,指定数据库的字符集为GBK。

su - omm source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gsql -d postgres -p 25308 postgres=#CREATE DATABASE mydb WITH ENCODING 'GBK' template = template0;

显示类似如下信息:

CREATE DATABASE

查看更多:华为GaussDB 200 初始配置
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论