首批通过分布式安全可靠测评,为关键业务系统打造
建表错误,错误代码 1118
更新时间:2026-05-19 09:51
本文介绍建表时报错 1118 提示 Row size too large 的原因和解决方法。
影响版本
OceanBase 数据库所有版本。
问题现象
建表时报错,系统提示 Row size too large,错误信息如下所示。
CREATE TABLE test (name01 varchar(262144), name02 varchar(131073),name bigint(100));
ERROR 1118 (42000): Row size too large
可能原因
根据错误信息,可以确定是由于字符类型长度超过了限制值。
排查建表语句,发现字符类型列长度超过 1.5MB 字节。对于 utf8mb4 字符集,每一个字符占据 4 字节,所以字符长度总限制为 1.5MB/4 = 393216。而 name01 与 name02 列的字符长度为 262144 + 131073 = 393217,超过了该限制,因此建表失败。
说明
OceanBase 数据库中,varchar 类型是按照指定长度计算的,最大长度为 256K 个字符;text、blob、 binary 类型的长度为 min { 指定长度,2048 } 。例如,blob(4096) 的计算长度为 2048,blob(1024) 计算长度为 1024。另外,bigint 与其他非 char、blog、text 类型不会纳入行大小的计算之中。例如上述 SQL 中,bigint 的长度不会影响该语句的运行。
解决方法
可以缩短 varchar 的长度来避免这个问题。
如果确认需要使用超过限制长度的字符,可以通过不使用 varchar 类型,而使用其他类型来解决,例如使用 varbinary。
obclient> CREATE TABLE test (name01 varchar(262144), name02 varbinary(131073),name bigint(100));