首批通过分布式安全可靠测评,为关键业务系统打造
字符集
更新时间:2026-04-10 11:58:36
OceanBase 数据库默认的字符集是 utf8mb4。
OceanBase 数据库目前支持如下字符集:
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 setOceanBase 数据库支持指定非默认字符集与服务器通信。例如,要使用
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