首批通过分布式安全可靠测评,为关键业务系统打造
字符集规范
更新时间:2025-03-25 15:12:41
本文介绍在 OceanBase 中进行字符集选择的规范。
用户可以在租户级、Database 级、表级、字段级、session 级设置字符集,目前 OceanBase 支持 utf8mb4、gbk、gb18030、binary 、utf16 等字符集。
说明
- 为支持无缝迁移,OceanBase 数据库在语法上将 UTF8 视为 UTF8MB4 的同义词。
- 数据库字符集暂不支持修改。
- OceanBase 数据库 V3.x 版本暂不支持
gb18030_2022字符集。如需使用gb18030_2022字符集,请部署 V4.2.0 或更高版本的 OceanBase 数据库。
以 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 链路之外,客户端、驱动也要做相应的配置,若环境配置错误,可能会显示乱码。