在达梦数据库上,有时候在做数据库移植或应用开发测试过程中会遇到“记录超长”的错误。报错“记录超长”字面意思很好理解,但是跟哪些因素有关呢?
这个报错其实根据字面意思我们大概知道是数据的长度超长,对达梦数据库比较熟悉的使用者其实是知道该如何处理的,一般来说有以下两种方法:
1、重新初始化实例,设置更大的页大小。
2、对报错的表开启超长记录。
下面我们通过举例来讨论这个记录超长的具体原因并进行分析,分析过程中我们要提到以下几个概念:
页大小(page_size) 超长记录 行内数据与行外数据 配置参数LOB_MAX_INROW_LEN
页大小
第一,当页大小为8K时,对于字符类型实际最大长度为3900字节(不同页大小影响字符类型实际的最大长度是不一样的,见下图所示)。

create table test_singlecol( col varchar(8000));
insert into test_singlecol values(repeat('a',4000)); --报错,因为超过3900了
insert into test_singlecol values(repeat('a',3880)); --报错,因为超过3900了
insert into test_singlecol values(repeat('a',3879)); --正常插入,还有20个自己被内置的存储占用,例如伪列rowid,trxid还有null标记等
复制
select lengthb(rowid),lengthb(trxid),* from dual;
复制
超长记录
ALTER TABLE test_singlecol ENABLE USING LONG ROW;
insert into test_singlecol values(repeat('a',3880)); --正常插入
insert into test_singlecol values(repeat('a',4000)); --正常插入
复制
在基表中,当没有指定 USING LONG ROW 存储选项时,插入 VARCHAR 数据类型的实际最大存储长度由数据库页面大小决定,如果指定了 USING LONG ROW 存储选项,则插入 VARCHAR 数据类型的长度不受数据库页面大小限制。VARCHAR 类型在表达式计算中的长度上限不受页面大小限制,为 32767;
行内数据与行外数据
drop table if exists test_text;
create table test_text(col text);
insert into test_text values(repeat('a',901));
commit;
select dump(col) from test_text;
复制
call create_table(39,'varchar(4000)');
call insert_table(39,4000);-- -2665: 记录超长
alter table "SYSDBA"."TEST_39COL" enable using long row;
call insert_table(39,4000);--正常插入
对于text类型表定义:
drop table if exists TEST_39COL;
call create_table(39,'text');
call insert_table(39,50);-- 正常插入,行内
call insert_table(39,100);-- 正常插入,行外
call insert_table(39,4000);-- 正常插入,行外
select dump(c1),dump(c2),dump(c3),dump(c4) from TEST_39COL;
复制
LOB类型行内存储最大长度
select * from v$dm_ini where para_name like 'LOB%';
复制
create table test_lob(col text);
insert into test_lob values(repeat('a',901));--行外
insert into test_lob values(repeat('a',900));--行内
commit;
select dump(col) from test_lob;
复制
综上所述,达梦数据库中报错“记录超长”与上述因素都有关系,其中页大小是影响最大的一个因素,如果业务场景中涉及的表都会比较“宽”,那么建议直接将页大小设置大一些,可以避免一些记录超长的问题,但是相对来说也会更加浪费空间一些,这里需要dba做一些权衡。
以上为本期分享,希望能带给大家帮助。想要了解更多往期干货,可访问页面最下方#达梦技术干货攻略#合集或下方相关分享。在此邀请更多学员参与“达梦技术干货投稿活动”,稿件获选后将在达梦“干货分享”专栏进行发布,欢迎来稿!
【干货攻略】SQL优化之-LIKE CASE WHEN改写思路

文章转载自达梦E学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
MogDB 发布更新,解决 openGauss 数据库在长事务情况下Ustore表膨胀问题
MogDB
290次阅读
2025-04-17 10:41:41
达梦数据发布上市后首份财报:2024年营收10.4亿、净利3.6亿,销售平均薪酬 101 万、研发 36 万
通讯员
234次阅读
2025-04-15 12:09:47
国产数据库图谱又上新|82篇精选内容全览达梦数据库
墨天轮编辑部
224次阅读
2025-04-23 12:04:21
全国首部图数据库国家标准发布!达梦数据深度参与!
达梦数据
167次阅读
2025-04-02 09:34:13
达梦数据携手中国移动建成国内最大分布式数据库集群
通讯员
153次阅读
2025-04-02 15:10:38
达梦数据库快速上手指南
孙莹
150次阅读
2025-04-10 23:35:47
达梦中国数据库产业基地竣工,光谷崛起“数据之弧”
通讯员
146次阅读
2025-04-23 09:41:05
国产数据库必修课已上新|达梦数据库,从入门到实战
墨天轮-雪宝君
136次阅读
2025-04-28 14:25:11
SQLark V3.4 更新 | 新增 PostgreSQL 数据库支持、SQL 常用代码段、表设计器体验升级,超多新功能等你来探索!
达梦产品与服务
124次阅读
2025-04-17 09:38:11
SQLark 数据生成 | 外键、自增列、check约束、虚拟列都能自动识别!
达梦产品与服务
101次阅读
2025-04-11 10:41:05