首批通过分布式安全可靠测评,为关键业务系统打造
如何为 Oracle 租户配置 GBK 字符集
更新时间:2025-12-23 05:06
本文介绍如何为 Oracle 租户配置 GBK 字符集。
适用版本
OceanBase 数据库 V2.X 及后续版本。
创建 GBK 租户
通过在 CREATE TENANT 语句中增加 charset=gbk,指定租户使用的字符集。创建租户的示例语句如下。
obclient> CREATE TENANT oracle replica_num = 1,
resource_pool_list=('pool1'),
charset=gbk
SET ob_tcp_invited_nodes='%',
ob_compatibility_mode='oracle',
parallel_max_servers=10,
parallel_servers_target=10,
ob_sql_work_area_percentage=20,
secure_file_priv = "";
连接创建的 Oracle 租户,验证 NLS_CHARACTERSET 变量的值是否为 GBK。
obclient> SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
+------------------+----------+--------+
| PARAMETER | VALUE | CON_ID |
+------------------+----------+--------+
| NLS_CHARACTERSET | ZHS16GBK | 0 |
+------------------+----------+--------+
注意
- CREATE TENANT 语句中,charset 不是变量,因此应放在 SET 子句前。
- Oracle 租户中,字符集是租户级的概念,因此租户中所有用户表的 CHAR、VARCHAR2、CLOB 字段都是 GBK 字符集;但系统表中的 CHAR 与 VARCHAR2 字段仍会保留 UTF8 字符集。
- Oracle 租户中,字符集不可修改,即不能通过 ALETR 语句修改租户、数据库、表与列的字符集
配置链路字符集
链路字符集是客户端和服务器之间交互使用的字符集,租户字符集与链路字符集没有直接关系,GBK 租户既可以使用 GBK 字符集作为链路字符集,也可以使用 UTF8 作为链路字符集。
可以通过以下方式确定使用的字符集:
客户端:客户端所在的环境是 GBK 环境还是 UTF8 环境。
JDBC:JDBC 程序的编码配置值是 GBK 还是 UTF8。
服务器端配置
对于 OceanBase 数据库 Oracle 租户,可以通过修改 character_set_client、character_set_connection 与 character_set_results 三个变量的值修改服务器端的链路字符集。
--永久性修改
obclient> SET GLOBAL character_set_client = gbk;
obclient> SET GLOBAL character_set_connection = gbk;
obclient> SET GLOBAL character_set_results = gbk;
--临时修改(仅对当前会话生效)
obclient> SET character_set_client = gbk;
obclient> SET character_set_connection = gbk;
obclient> SET character_set_results = gbk;
此外,如果仅需要临时修改服务器端的链路字符集,也可以通过 SET NAMES 语句进行修改。
obclient> SET NAMES gbk;
配置成功后,可以通过以下语句验证当前链路字符集的配置。
如果 character_set_client、character_set_connection 与 character_set_results 三个变量的值均为 gbk,表示链路 gbk 已经配置完毕。
obclient>show variables like '%character_set%';
+--------------------------+---------+
| VARIABLE_NAME | VALUE |
+--------------------------+---------+
| character_set_client | gbk | -> 客户端字符集
| character_set_connection | gbk | -> 字符常量字符集(mysql模式)
| character_set_database | gbk | -> 库字符集(mysql模式)
| character_set_filesystem | binary | -> 文件系统字符集(不使用)
| character_set_results | gbk | -> 返回客户端(字符类型)结果的字符集
| character_set_server | gbk | -> 租户字符集
| character_set_system | utf8mb4 | -> 系统字符集
+--------------------------+---------+
客户端配置
如果生产环境中的中文字符均为 GBK 编码,那么除了在服务器端配置 GBK 链路外,还需要修改客户端或驱动的链路字符集。
使用 JDBC 连接数据库时,可以通过修改 URL 的参数设置,在 URL 中添加
characterEncoding=gbk。String url = "jdbc:oceanbase://xxx.xxx.xxx.xxx:xxxx?useSSL=false&useUnicode=true&characterEncoding=gbk&connectTimeout=30000&rewriteBatchedStatements=true";使用 OBClient 连接数据库时,需要按以下步骤配置。
修改环境变量。
export LANG=zh_CN.GBK export LC_ALL=zh_CN.GBK修改终端的编码配置。
本文以 ITEM2 终端为例。
