首批通过分布式安全可靠测评,为关键业务系统打造
在设置 character_set_results=NULL 情况下执行 show create table 出现 Invalid argument 报错的原因和解决方法
更新时间:2026-05-18 09:11
问题现象
某些 OceanBase 数据库版本在设置 character_set_results=NULL 情况下执行 show create table 出现 Invalid argument 报错,如下示例。
obclient [(none)]> set character_set_results=NULL;
Query OK, 0 rows affected (0.000 sec)
obclient [test]> show create table dpst_fee_tx_msg_bak;
ERROR 1210 (HY000): Invalid argument
关键日志信息。
observer.log.20240530174309494:[2024-05-30 17:42:43.338912] WDIAG [LIB.CHARSET] charset_convert (ob_charset.cpp:2982) [91465][T1006_L0_G0][T1006][xxxxx-xxxxx-xxxxx-xxxxx] [lt=36][errcode=-4002] invalid collation type(ret=-4002, src_cs_type=45, dst_cs_type=0)
observer.log.20240530174309494:[2024-05-30 17:42:43.338936] WDIAG [SHARE.SCHEMA] print_table_definition_columns (ob_schema_printer.cpp:352) [91465][T1006_L0_G0][T1006][xxxxx-xxxxx-xxxxx-xxxxx] [lt=25][errcode=-4002] fail to convert charset(ret=-4002)
问题原因
OceanBase 数据库集群内部在返回客户端数据时,会根据 character_set_results 进行字符集转换,但是部分版本在 character_set_results=NULL 时存在处理缺陷,导致内部处理时出现未知的异常。该问题一般发生在表的列是 varchar 类型且存在 default 值。
问题的风险及影响
导致 show create table 语句执行失败。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V4.x 版本。
解决方法及规避方式
解决方法:
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.1 BP3(oceanbase-4.2.1.3-103000052023122809)版本。
规避方式:
修改建表语句中的列类型,避免使用 varchar 类型且存在 default 值 的组合。
设置会话级别和全局级别的
character_set_results为非 NULL。