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.大范围字符集向小范围字符集转换时出现不支持的字符乱码,排序时会使用乱码在当前字符集下的二进制进行排序。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。