---
title: Oracle 参数 max_string_size 引发的兼容性问题-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 Oracle 参数 max_string_size 引发的兼容性问题相关的常见问题和使用技巧，帮助您快速解决 Oracle 参数 max_string_size 引发的兼容性问题的难题。
---
切换语言

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

划线反馈

# Oracle 参数 max_string_size 引发的兼容性问题

更新时间：2026-05-18 09:11

适用版本： V2.2.x、V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 问题现象

在 OceanBase 数据库的 Oracle 租户执行下述语句，对一个长度 2001 字节的字符先转为 raw 再求 hash 值的操作，返回超长的报错，然而相应的语句在 Oracle 可以正常执行。

```shell
obclient [SYS]> select  dbms_crypto.hash(utl_raw.cast_to_raw(value),2) md5_val from (select lpad('a',2001,'a') value from dual);
ORA-06502: PL/SQL: numeric or value error: raw variable length too long

```

## 问题原因

对于 Oracle 来说，12C 版本之后就引进了 `max_string_size` 参数，如果将此参数的默认值 STANDARD 改为 EXTENDED 的话，字段类型 VARCHAR2、NVARCHAR2、RAW，均扩容到 32767。如不修改的话，RAW 的长度为 2000。

```shell
SQL> select  dbms_crypto.hash(utl_raw.cast_to_raw(value),2) from (
   select lpad('a',2001,'a') value from dual
  );
DBMS_CRYPTO.HASH(UTL_RAW.CAST_TO_RAW(VALUE),2)
--------------------------------------------------------------------------------
92EF9E6254EF983ED822E8FEE32754A9

```

```shell
SQL> select  dbms_crypto.hash(utl_raw.cast_to_raw(value),2) md5_val from (
   select lpad('a',2001,'a') value from dual
  );                         *
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: raw variable length too long

```

```shell
SQL> select  dbms_crypto.hash(utl_raw.cast_to_raw(value),2) from (
   select lpad('a',2001,'a') value from dual
  );
ORA-06512: at "SYS.UTL_RAW", line 224

```

OceanBase 数据库在设计的时候，并没有采用类似 `max_string_size` 的设置，常用的 varchar2 的最大长度已经是 32767，这与 Oracle 的最大值是一致的。至于 RAW 值，则仍然为 2000，比将 `max_string_size` 设置为 EXTENED 的 Oracle 小，有兼容性风险。

## 适用版本

OceanBase V2.x、V3.x版本。

## 解决方法

目前 OceanBase 数据库侧并无解决方案，仅能修改应用程序。

对于本文档例子中的求 hash 值的语句，可以这么修改。

```shell
obclient [SYS]> select  dbms_crypto.hash(to_clob(value),2) md5_new_val from (
    ->  select lpad('a',2001,'a') value from dual
    -> );
+----------------------------------+
| MD5_NEW_VAL                      |
+----------------------------------+
| 92EF9E6254EF983ED822E8FEE32754A9 |
+----------------------------------+
1 row in set (0.044 sec)

```

需要特别说明的是，目前 OceanBase 数据库的 `dbms_crypto` 函数处理 clob 逻辑与 Oracle 并不完全一致，同样的文本，有一定概率返回不一样的值。

上一篇

[在设置 character_set_results=NULL 情况下执行 show create table 出现 Invalid argument 报错的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002398330)

下一篇

[Datetime 为 0 时，Go 驱动结果为负数](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000466188) ![有帮助](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) 咨询热线
