---
title: 如何为 Oracle 租户配置 GBK 字符集 -OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于如何为 Oracle 租户配置 GBK 字符集 相关的常见问题和使用技巧，帮助您快速解决如何为 Oracle 租户配置 GBK 字符集 的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 如何为 Oracle 租户配置 GBK 字符集

更新时间：2025-12-23 05:06

适用版本： V2.2.x、V3.1.x、V3.2.x 内容类型：How-to  

本文介绍如何为 Oracle 租户配置 GBK 字符集。

## 适用版本

OceanBase 数据库 V2.X 及后续版本。

## 创建 GBK 租户

通过在 `CREATE TENANT` 语句中增加 `charset=gbk`，指定租户使用的字符集。创建租户的示例语句如下。

```unknow
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。

```unknow
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` 三个变量的值修改服务器端的链路字符集。

```unknow
--永久性修改
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` 语句进行修改。

```unknow
obclient> SET NAMES gbk;

```

配置成功后，可以通过以下语句验证当前链路字符集的配置。

如果 `character_set_client`、`character_set_connection` 与 `character_set_results` 三个变量的值均为 `gbk`，表示链路 gbk 已经配置完毕。

```unknow
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`。

  ```unknow
  String url = "jdbc:oceanbase://xxx.xxx.xxx.xxx:xxxx?useSSL=false&useUnicode=true&characterEncoding=gbk&connectTimeout=30000&rewriteBatchedStatements=true";

  ```
 - 使用 OBClient 连接数据库时，需要按以下步骤配置。

     1. 修改环境变量。

       ```unknow
       export LANG=zh_CN.GBK
       export LC_ALL=zh_CN.GBK

       ```
     2. 修改终端的编码配置。

       本文以 ITEM2 终端为例。

       ![GBK 客户端链路](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/8090614261/p284284.png)

Previous

[MySQL 模式字符集总结](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000225639)

Next

[Oracle 租户 GBK 字符集生僻字显示乱码](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207707) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
