GBase 数据 当前支持的字符集有:gbk、gb18030、utf8、utf8mb4。默认字符集为utf8。

1.gb18030字符集在gbk字符集基础上扩充了4字节编码,express引擎预留存储空间时会按每个字符4字节进行预留,在内存不足时对性能影响较大。

2.GBase 8a的utf8字符集处理1-3字节的字符,utf8mb4字符集处理1-4字节字符。

3.GBase 8a当前任何字符集的校验规则都是区分大小写的。

4.GBase 8a的字符集可以通过配置参数设置,也可以在建库、建表时给库、表指定字符集。

建库表时指定字符集:
create database db_name default character set gbk;

如不指定,则使用实例的字符集。

Create table t(a int,b varchar(100)) engine=express default charset=gbk;

如不指定,则使用数据库字符集。

字符集的配置参数:

l  character_set_client

客户端请求数据的字符集,即客户端发送的sql使用的字符集。可以使用set语句修改。

l  character_set_connection

接收客户端发布的查询请求后,指定转换的目标字符集。可以使用set语句修改。

l  character_set_server

数据库实例的字符集。

不建议修改,如修改只对修改后新建的库表起效,已经建立的库表字符集不变。

  character_set_results

结果集的字符集,即返回给客户端的字符集。可以使用set语句修改。

  default_character_set

数据库实例的默认字符集,只能通过配置文件设置,重启服务后起效。不建议更改,一经更改后只对新建的库表起效,已经建立的库表不受影响。

数据库服务启动时读取default_character_set值,其默认值为utf8。数据库服务启动后可以通过show 查看参数character_set_server的值来确定实例字符集。

character_set_sort

排序使用的字符集,可以使用set语句修改。

character_set_systerm

系统字符集,系统元数据(字段名等)字符集,不支持人工更改。

character_set_database

数据库默认字符集,用于查看当前数据库的默认字符集,不用于修改。

字符集设置

默认字符集设置:通过配置文件设置。

修改每个节点的gcluster和gnode配置文件

$GCLUSTER_BASE/config/gbase_8a_gcluster.cnf

$GBASE_BASE/config/gbase_8a_gbase.cnf

修改内容如下:

[client]

default_character_set=…

[gbased]

default_character_set=…

collation_server=…

修改字符集相关参数。

set [global] character_set_=’

gbase 8a不支持alter table修改表的字符集,修改表的字符集需要通过重建表并导入数据完成。

字符集设置注意事项:

1、  按实际情况正确设置字符集的server、client、results相关参数

2、  开发初始设计字符集时尽量使client端字符集与server端字符集一致,减少内部转码,转码对sql性能有一定影响

3、  Character_set_database的值是查看当前数据库默认字符集,修改无意义

4、  Character_set_systerm不可修改

5、  GBase 8a支持的字段宽度:gbk最大字段宽度为10922,gb18030最大字段宽度为8191。

6、  字符集的设置,要根据8a字符集转换流程,按实际情况正确设置字符集相关参数,避免乱码。
sql查询àclient字符集àconnection字符集à库表字符集à结果集àresults字符集à返回给客户端

转换时当目标字符集小于源字符集时可能会出现乱码或者信息丢失;

当小字符集数据存储为大字符集后,查询时直接以大字符集显示结果,可能出现乱码。

字符集查看

查看支持的字符集:

show charset;

查看排序规则:

show collation;

查看当前集群使用的字符集信息:

show variables like ‘%charac%’;

show variables like ‘%colla%’;

指定排序字符集

排序字符集参数:character_set_sort

取值:

binary: 默认值,按排序列字符集的二进制排序

utf8:对排序列字符集进行判断,如非utf8字符集,则先转换为utf8字符集,再按utf8字符集的二进制进行排序

gbk:对排序列字符集进行判断,如非gbk字符集,则先转换为gbk字符集,再按gbk字符集的二进制进行排序。GBK内码编码是采用拼音排序的方法。

character_set_sort只对字符型的列进行转换,包括char、varchar、text

可以通过在配置文件中添加在[gbased]标签下设置,也可以使用set赋值。

示例:按拼音排序

set character_set_sort=gbk;

select * from t order by col1;

乱码情况下的排序:

1.使用utf8编码向gbk表中插入了gbk无法识别的字符,无论使用utf8编码排序还是gbk编码的拼音排序,该字符均以乱码本身进行排序排在最后。

2.大范围字符集向小范围字符集转换时出现不支持的字符乱码,排序时会使用乱码在当前字符集下的二进制进行排序。


GBase数据库
1 声望2 粉丝

GBase数据库知识分享