---
title: OceanBase 数据库 V4.x 版本中字符集为 gbk 的 Oracle 模式租户下匿名块含 dbms_sql.parse 函数，执行时报错 ob_convert failed(ret=-4258 的原因和解决方法-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于OceanBase 数据库 V4.x 版本中字符集为 gbk 的 Oracle 模式租户下匿名块含 dbms_sql.parse 函数，执行时报错 ob_convert failed(ret=-4258 的原因和解决方法相关的常见问题和使用技巧，帮助您快速解决OceanBase 数据库 V4.x 版本中字符集为 gbk 的 Oracle 模式租户下匿名块含 dbms_sql.parse 函数，执行时报错 ob_convert failed(ret=-4258 的原因和解决方法的难题。
---
切换语言

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

划线反馈

# OceanBase 数据库 V4.x 版本中字符集为 gbk 的 Oracle 模式租户下匿名块含 dbms_sql.parse 函数，执行时报错 ob_convert failed(ret=-4258 的原因和解决方法

更新时间：2026-05-19 08:21

适用版本： V4.0.x、V4.1.x、V4.2.x 内容类型：Troubleshoot  

## 问题现象

OceanBase 数据库 V4.x 版本中字符集为 gbk 的 Oracle 模式租户环境下，执行一个含 `dbms_sql.parse` 函数的匿名块，结果返回乱码，如下图所示。

![image01](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/20241021dbmssqlparse001.png)

关键日志信息如下。

```shell
[2024-09-27 13:31:55.601647] WDIAG [LIB.CHARSET] charset_convert (ob_charset.cpp:2963) [3922][T1008_L0_G0][T1008][xxxxx-xxxxx-xxxxx-xxxxx] [lt=1][errcode=-4258] ob_convert failed(ret=-4258, errors=6, from_type=46, to_type=87, from_charset="utf8mb4", to_charset="gbk", ObString(from_len, from_str)='����ƾ֤', to_len=20, from_str="data_size:10, data:27B4E6CDD0C6BED6A427")
[2024-09-27 13:31:55.601690] WDIAG [LIB.CHARSET] charset_convert (ob_charset.cpp:3032) [3922][T1008_L0_G0][T1008][xxxxx-xxxxx-xxxxx-xxxxx] [lt=43][errcode=-4258] convert charset failed(ret=-4258, in='����ƾ֤', src_cs_type=46, dst_cs_type=87, in.ptr()="data_size:10, data:27B4E6CDD0C6BED6A427")

```

## 问题原因

该问题为产品缺陷，gbk 字符集租户下系统包 `dbms_sql.parse` 是按 utf8 执行的，导致接收到 gbk 编码的 SQL 解析时出现乱码。

## 问题的风险及影响

执行结果乱码。

## 影响租户

影响 OceanBase 数据库中的 Oracle 租户，对于 SYS 租户和 MySQL 租户无影响。

## 适用版本

OceanBase 数据库 V4.x 版本。

## 解决方法及规避方式

- 解决方法：

  升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.5（oceanbase-4.2.5.0-100000082024102022）版本。
 - 规避方式：

  在 OceanBase 数据库 V4.2.1.8 版本中复现，示例如下。

     1. 创建表与存储过程。

       ![image001](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/20241216obgbk001.jpg)

       上述存储过程中存在 `dbms_sql.column_value(vl_FormulaID,1,vc_out);` 输出报错。
     2. 注释掉不执行存储过程中 dbms_sql.parse 解析。

       ![image002](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/20241216obgbk002.jpg)

       上述存储过程中注释掉不执行 `dbms_sql.column_value(vl_FormulaID,1,vc_out);` 正常输出。
     3. 查看字符集。

       ![image003](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/20241216obgbk003.jpg)

gbk 字符集下，使用 `EXECUTE IMMEDIATE` 或者 `open/fetch` 的形式输出。

上一篇

[OceanBase 数据库 Oracle 模式下 SQL 涉及 GROUP BY 函数列 GROUP BY 函数列，报错 ORA-00979: 'SYS.A.NUM2' not a GROUP BY expression](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002999342)

下一篇

[OceanBase 数据库 V3.x 版本中通过 dbms_metadata.get_ddl 函数包无法获取二级分区表 USING INDEX LOCAL 的 unique 约束的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001843058) ![有帮助](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) 咨询热线
