首批通过分布式安全可靠测评,为关键业务系统打造
建表时遇到报错:-5199, Row size too large 的原因和解决方法
更新时间:2026-05-19 09:51
问题现象
创建包含 LOB 字段的大宽表时遇到了报错 ErrorCode = 600, SQLState = 42000, Details = ORA-00600: internal error code, arguments: -5199, Row size too large。

问题原因
对应业务表中行的长度超过 OceanBase 内核的行长限制:
最大记录长度: OceanBase 数据库的最大长度为 1.5MB 字节。对于
utf8mb4字符集,每个字符占用 4 字节,因此字符长度总限制为1.5MB / 4 = 393216个字符。示例: 在建表语句中,例如
name01和name02列的字符长度分别为262144和131073,总字符长度为393217,超过了393216的限制,因此会导致建表失败。说明
对于 LOB 字段,统一按照当前表上的
lob_inrow_threshold属性值计算来进行 1.5MB 行长的检查。
适用版本
OceanBase 数据库 V4.2.1 GA(oceanbase-4.2.1.0-100000182023092722)及之后版本。
解决方案
调整字符列长度。
减少字符列长度: 确保所有字符列的总长度不超过
393216个字符。例如,可以将name01和name02列的长度分别减少到262144和131072。建表时指定
lob_inrow_threshold属性。-- MySQL 模式租户 create table x (xxxx) lob_inrow_threshold=4096; -- 该变量只针对 MySQL 模式生效 -- Oracle 模式租户的 create table/alter table 语法中没有对应的 `lob_inrow_threshold=xxx` 选项