首批通过分布式安全可靠测评,为关键业务系统打造
字符集规范
更新时间:2025-03-25 16:47:04
本文介绍在 OceanBase 中进行字符集选择的规范。
用户可以在租户级、Database 级、表级、字段级、session 级设置字符集,目前 OceanBase 支持 utf8mb4、gbk、gb18030、binary 、utf16 等字符集。
说明
- 为支持无缝迁移,OceanBase 在语法上将
UTF8视为UTF8MB4的同义词。 - 数据库字符集暂不支持修改。
以 gbk 字符集为例:
在创建租户时设置字符集
可以在 create tenant 语句添加 charset 设置,添加
"charset=gbk"。create tenant oracle replica_num = 1, resource_pool_list =('pool1'), charset = gbk set ob_tcp_invited_nodes = '%', ob_compatibility_mode = 'oracle', parallel_servers_target = 10, ob_sql_work_area_percentage = 20, secure_file_priv = "";可以在 OCP 中创建租户时,选择字符集为 gbk。
注意
- Oracle 模式的字符集是租户级别,在 gbk 租户中,所有用户表的 char、varchar2、clob 字段都是 gbk 字符集,系统表的 char 、varchar2 等字段仍然保留 utf8 字符集。
- Oracle 模式的租户字符集是不可修改的,即不能通过
alter语句修改租户、库、表、列的字符集。
设置客户端(链路)字符集
客户端(链路)字符集是配置 Client 和 Server 之间交互使用的字符集设置。
Client 将 SQL 字符串的发给 Server 执行,Server 将执行结果返回给 Client,在这个过程中,Server 需要明确知道 Client 使用的字符集是什么,才能正确的解析,执行和返回结果。在不同环境下,Client 可以是 OBClient、jdbc 或 OCI 等,因此有时候也会叫做链路字符集。
租户字符集与客户端字符集没有直接关系,是相互独立配置的。
GBK 租户可以被 GBK 的客户端连接,也可以被 UTF8 的客户端连接。
当客户端字符集为 GBK 时,Server 会按照 GBK 解析和执行接收到的 SQL 语句。
当客户端字符集为 UTF8 时,Server 会按照 UTF8 解析和执行收到的 SQL 语句。
配置方法
永久性修改
set global character_set_client = gbk; set global character_set_connection = gbk; set global character_set_results = gbk;character_set_client:客户端字符集。
character_set_connection:连接字符集。在 oracle 租户下应设置为与 character_set_client 一致的值。
character_set_results:Server 返回给 Client 结果的字符集。
一般来说,客户端发给服务器,和服务器返回给客户端字符串的字符集是统一的,因此在 Oracle 模式的租户下,这三个值应该保持一致;MySQL 模式使用 3 个变量的作用是可以灵活进行配置,一般使用场景将三个变量都配置成客户端的字符集即可。
临时修改(仅对本 Session 生效)
方法一:
set character_set_client = gbk; set character_set_connection = gbk; set character_set_results = gbk;方法二:
set names gbk;
设置客户端字符集
使用 jdbc 连接 OceanBase 数据库,GBK 链路一般在 url 里修改参数设置,添加
characterEncoding=gbk。String url = "jdbc:oceanbase://xxx.xxx.xxx.xxx:xxxx?useSSL=false&useUnicode=true&characterEncoding=gbk&connectTimeout=30000&rewriteBatchedStatements=true";使用 OBClient 客户端连接数据库,GBK 链路 bash 环境变量推荐使用
zh_CN.GBK的超集zh_CN.GB18030。修改 bash 环境变量
export LANG=zh_CN.GB18030 export LC_ALL=zh_CN.GB18030修改终端的编码设置,将当前窗口设置为 gbk 编码。请根据终端界面指示进行操作。
注意
除了将数据库(observer 进程)配置成 GBK 链路之外,客户端、驱动也要做相应的配置,若环境配置错误,可能会显示乱码。