您可以指定数据库中服务器的编码格式,作为数据库数据的存储格式。本文以示例的形式介绍PolarDB兼容的GBK与GB18030两种编码格式的使用方法。
简介
GBK
GBK(Chinese Internal Code Specification)即汉字内码扩展规范 。GBK共收录21886个汉字和图形符号,包括:
GB2312中的全部汉字和非汉字符号。
BIG5中的全部汉字。
国家标准GB13000中的其它CJK汉字。
其它汉字、部首和符号。
GB18030
GB18030即国家标准GB18030-2005《信息技术中文编码字符集》,是GB18030-2000《信息技术信息交换用汉字编码字符集基本集的扩充》的修订版,也是最新的汉字编码字符集国家标准。向下兼容GBK和GB2312标准,共收录70244个汉字。且采用多字节编码,每个字可以由单字节、双字节或四字节组成。其中单字节、双字节和GBK完全兼容。四字节编码的码位为CJK扩展A的6582个汉字。编码空间庞大,最多可定义161万个字符。支持中国内地所有的文字。汉字收录范围包含繁体汉字以及日韩汉字。
注意事项
如果Oracle是GBK字符集,建议使用GB18030字符集。因为Oracle中GBK字符集的字符数量会大于PolarDB中的GBK字符集的字符数量,实际类似于PolarDB中的GB18030,而且GB18030字符集对GBK字符集向下兼容。
UTF-8和GBK中字符长度不同。例如,一个非生僻汉字在GBK中长度为2,在UTF-8中长度为3,使用时需要注意字符语义。
创建数据库时根据自己的业务特性,需要指定
LC_COLLATE
和LC_CTYPE
属性,不同字符集的排序规则可能不同。说明由于编码内部原因,强烈建议您不要将LC_CTYPE属性设置为‘zh_CN.gbk’或‘zh_CN.gb18030’,可能导致某些函数(例如upper)的结果出现异常。
示例
指定GBK编码格式。
创建数据库
db_gbk
,并指定服务器编码格式为GBK,客户端编码格式为UTF-8。CREATE DATABASE db_gbk template template0 encoding = gbk LC_COLLATE = 'C' LC_CTYPE = 'C'; \c db_gbk; SET client_encoding = 'utf-8';
创建
test_table
表。CREATE TABLE test_table(f1 varchar(3));
向
test_table
表中插入数据。INSERT INTO test_table (f1) VALUES ('张三'); INSERT INTO test_table (f1) VALUES ('李四'); INSERT INTO test_table (f1) VALUES ('王先生'); INSERT INTO test_table (f1) VALUES ('张女士');
查询
test_table
表中的全量数据,并按照升序排列。SELECT * FROM test_table ORDER BY f1;
查询结果如下:
李四 王先生 张女士 张三 (4 rows)
指定GB18030编码格式。
创建数据库
db_gb18030
,并指定服务器编码格式为GB18030,客户端编码格式为UTF-8。CREATE DATABASE db_gb18030 template template0 encoding = gb18030 LC_COLLATE = 'C' LC_CTYPE = 'C'; \c db_gb18030; SET client_encoding = 'utf-8';
创建
polar_text
表。CREATE TABLE polar_text(i int, f1 text);
向
polar_text
表中插入数据。INSERT INTO polar_text (f1) VALUES ('张三'); INSERT INTO polar_text (f1) VALUES ('李四'); INSERT INTO polar_text (f1) VALUES ('王先生'); INSERT INTO polar_text (f1) VALUES ('€张女士');
查询
polar_text
表中的全量数据,并升序排列。SELECT * FROM polar_text ORDER BY f1;
查询结果如下:
i | f1 ---+------------ | 李四 | 王先生 | €张女士 | 张三 (4 rows)