---
title: "字符集规范 - OceanBase 数据库 V4.3.4 | OceanBase 文档中心"
description: 字符集规范 本文介绍在 OceanBase 中进行字符集选择的规范。 用户可以在租户级、Database 级、表级、字段级、session 级设置字符集，目前 OceanBase 支持 utf8mb4 、 gbk 、 gb18030 、 binary 、 utf16 等字符集。 说明 为支持无缝迁移，OceanBas…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.4

# 字符集规范

更新时间：2025-03-25 16:47:04

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.4/zh-CN/700.reference/400.database-design-specifications-and-practices/300.character-set-specification.md)  

本文介绍在 OceanBase 中进行字符集选择的规范。

用户可以在租户级、Database 级、表级、字段级、session 级设置字符集，目前 OceanBase 支持 `utf8mb4`、`gbk`、`gb18030`、`binary` 、`utf16` 等字符集。

#### 说明

- 为支持无缝迁移，OceanBase 在语法上将 `UTF8` 视为 `UTF8MB4` 的同义词。
 - 数据库字符集暂不支持修改。

以 gbk 字符集为例：

- 在创建租户时设置字符集

     - 可以在 create tenant 语句添加 charset 设置，添加 `"charset=gbk"`。

      ```shell
      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 语句。
     - 配置方法

           - 永久性修改

            ```shell
            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 生效）

                   - 方法一：

                    ```shell
                    set character_set_client = gbk;
                    set character_set_connection = gbk;
                    set character_set_results = gbk;

                    ```
                   - 方法二：

                    ```shell
                    set names gbk;

                    ```
 - 设置客户端字符集

     - 使用 jdbc 连接 OceanBase 数据库，GBK 链路一般在 url 里修改参数设置，添加 `characterEncoding=gbk`。

      ```shell
      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 环境变量

            ```shell
            export LANG=zh_CN.GB18030
            export LC_ALL=zh_CN.GB18030

            ```
           - 修改终端的编码设置，将当前窗口设置为 gbk 编码。请根据终端界面指示进行操作。  

  #### 注意

  除了将数据库（observer 进程）配置成 GBK 链路之外，客户端、驱动也要做相应的配置，若环境配置错误，可能会显示乱码。

 上一篇 下一篇 ![有帮助](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) 咨询热线
