基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
字符集
更新时间:2026-07-15 20:56:55
OceanBase 数据库默认的字符集是 utf8mb4。
功能适用性
OceanBase 数据库社区版和 OceanBase Connector/J 暂不支持 utf8mb4_unicode_ci 和 utf16_unicode_ci。
OceanBase 数据库在 MySQL 模式目前支持如下字符集:
binarygbkgb18030utf16utf8mb4latin1gb18030_2022
说明
为支持无缝迁移,OceanBase 数据库在语法上将 UTF8 视为 UTF8MB4 的同义词。
字符集显式转换
OceanBase 数据库当前版本不支持 gb18030 与 gb18030_2022 的隐式转换,但用户可以通过 CONVERT 将一个 gb18030 的字符串的字符集显式转换为 gb18030_2022。
该转换没有经过 Unicode,采取了保留编码的方法。
如下示例中,‘龴’ 的编码在转换前后都为 0xFE59,没有发生变化。
obclient> SELECT HEX(CONVERT(_gb18030 0xFE59 USING gb18030_2022)), HEX(CONVERT(_gb18030_2022 0xFE59 USING gb18030));
+--------------------------------------------------+--------------------------------------------------+
| HEX(CONVERT(_gb18030 0xFE59 USING gb18030_2022)) | HEX(CONVERT(_gb18030_2022 0xFE59 USING gb18030)) |
+--------------------------------------------------+--------------------------------------------------+
| FE59 | FE59 |
+--------------------------------------------------+--------------------------------------------------+
1 row in set
查看字符集
通过使用 SHOW CHARACTER SET 语句,您可以查看可用的字符集。
obclient> SHOW CHARACTER SET;
+--------------+-----------------------+-------------------------+--------+
| Charset | Description | Default collation | Maxlen |
+--------------+-----------------------+-------------------------+--------+
| binary | Binary pseudo charset | binary | 1 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
| gbk | GBK charset | gbk_chinese_ci | 2 |
| utf16 | UTF-16 Unicode | utf16_general_ci | 2 |
| gb18030 | GB18030 charset | gb18030_chinese_ci | 4 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| gb18030_2022 | GB18030-2022 charset | gb18030_2022_chinese_ci | 4 |
+--------------+-----------------------+-------------------------+--------+
7 rows in set
指定字符集
OceanBase 数据库支持指定非默认字符集与服务器通信。通过使用 SET NAMES <character_name> 语句,您可以指定字符集。
例如,要使用 gbk 字符集,在连接到服务器后执行以下语句:
obclient> SET NAMES gbk;
Query OK, 0 rows affected
需要注意的是,SET NAMES 语句不会更改客户端输入字符的编码。例如,使用 SET NAMES 配置客户端编码为 gb18030_2022 的前提是客户端已经使用了 gb18030_2022 编码,否则会导致乱码出现。
以下是一个示例:
/* 客户端使用 utf8mb4 字符集并创建了默认为 utf8mb4 字符集的表 t */
obclient> CREATE TABLE t(c VARCHAR(100));
Query OK, 0 rows affected
/* 插入了 utf8mb4 编码的字符 */
obclient> INSERT INTO t VALUES ('字符集');
Query OK, 1 row affected
/* 修改了当前会话的字符集,但没有改变客户端实际使用的字符集 */
obclient> SET NAMES gb18030_2022;
Query OK, 0 rows affected
/* 仍然使用 utf8mb4 编码插入字符 */
obclient> INSERT INTO t VALUES ('字符集');
Query OK, 1 row affected
/* 查询表 t 的数据出现乱码 */
obclient> SELECT * FROM t;
+----------+
| c |
+----------+
| �ַ��� |
| 字符� |
+----------+
2 rows in set
/* 修改当前会话的字符集为 utf8mb4 */
obclient> SET NAMES utf8mb4;
Query OK, 0 rows affected
/* 再次查询表 t 的数据,第二次插入的字符仍为乱码 */
obclient> SELECT * FROM t;
+--------------+
| c |
+--------------+
| 字符集 |
| 瀛楃闆 |
+--------------+
2 rows in set