首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >记录超长 – Long Row – 2665 – 达梦数据库

记录超长 – Long Row – 2665 – 达梦数据库

作者头像
收心
发布2026-04-16 09:04:10
发布2026-04-16 09:04:10
230
举报
文章被收录于专栏:Java实战博客Java实战博客

本页目录 Toggle

Long Row 是什么?

Long Row = 允许一行数据超长

  • 达梦默认:一行数据不能超过 “页大小的一半”
  • 开启 LONG ROW 之后:这张表不再严格限制单行总长度,超长的字段会自动放到行外面存,只留一个指针在行里。

大白话:

本来一行必须塞进半页里,现在允许 “一部分数据挂在行外面”,表就不会报 “记录超长”。

为什么需要 Long Row?

因为达梦有一个很严格的物理限制

规则

  • 数据库按 “页” 存储数据(4K/8K/16K/32K)
  • 单行数据长度 ≤ 页大小 / 2 (假设表有2字段:id、name 这俩字段算单行数据)

常见场景一定会超限

  • 一张表里有 好几个长 VARCHAR 比如:标题、内容、备注、摘要、URL、文件名……
  • 加起来总长度轻松超过 4000 / 8000 字节
  • 结果:插入失败 → 记录超长

为什么不直接用 CLOB/TEXT?

  • 改字段类型要改代码、改映射、改 SQL
  • 老项目、迁移项目(尤其是 Oracle 迁移)不想动结构
  • Long Row 是零代码改动、最快的解决方案

如何判断是否要开启 Long Row?

满足下面任意一条,就应该开:

① 你遇到了这个错误

代码语言:javascript
复制
记录超长
-2665 错误
Data too long for row

② 表字段长度总和接近 / 超过半页上限

页大小

单行最大安全长度

8K

约 4000 字节

16K

约 8000 字节

32K

约 16000 字节

你可以用 SQL 看字段总长

代码语言:javascript
复制
SELECT SUM(DATA_LENGTH)
FROM DBA_TAB_COLUMNS
WHERE TABLE_NAME = '你的表名';

③ 表中有很多长文本、富文本、备注

比如:

  • 文档内容、文章详情
  • 多条备注、多个长描述
  • 存储 Base64、大段 JSON、HTML

这种 100% 要开 LONG ROW。

开启Long Row 带来什么问题?

开启后能解决报错,但有代价,你必须知道:

① 性能变差

  • 长数据存在行外,需要多一次 IO 读取
  • 查询长字段会比普通行内字段慢

② 不能随便建索引

  • 超长字段不能建普通索引(会报索引超长)
  • 只能用全文索引

③ 不适合频繁更新的大字段

行外存储机制对频繁修改的超大文本不算友好。

④ 只对当前表生效

不是一开全局生效,每张容易超长的表都要单独开。

超级精简总结

Long Row 是什么:允许行数据超长,自动把部分字段存到行外

Long Row 带来什么问题:性能略降、索引受限、只表级生效

为什么需要:达梦单行限制太严,多几个长文本就超限报错

怎么判断要开:报 -2665 / 字段总长接近半页 / 存大文本

核心查询SQL

代码语言:javascript
复制
-- 查看页大小(输出单位是K)
SELECT SF_GET_PAGE_SIZE() AS PAGE_SIZE_KB;  
-- 输出:32768 表示你是32K的 也就是一行全部字段不得超过16000字符,上文有对照表,自己看

-- 查看你的表是否已启用 LONG ROW
SELECT 
  OWNER AS "表所属",
  TABLE_NAME AS "表名",
  STATUS AS "状态",
  LONG_ROW AS "是否开启长行"
FROM DBA_TABLES 
WHERE TABLE_NAME = 'SomeTable';

-- 开启达梦的长行 Long Row
ALTER TABLE 你的表名 ENABLE USING LONG ROW;

-- 查看表字段长度总和,判断是否超限
SELECT 
  TABLE_NAME,
  SUM(DATA_LENGTH) AS TOTAL_FIELD_LENGTH
FROM DBA_TAB_COLUMNS 
WHERE TABLE_NAME = 'DOC_REVIEW_ITEM'
GROUP BY TABLE_NAME;

免责声明: 本站文章旨在总结学习互联网技术过程中的经验与见解。任何人不得将其用于违法或违规活动!所有违规内容均由个人自行承担,与作者无关。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Long Row 是什么?
  • 为什么需要 Long Row?
    • 规则
    • 常见场景一定会超限
    • 为什么不直接用 CLOB/TEXT?
  • 如何判断是否要开启 Long Row?
    • ① 你遇到了这个错误
    • ② 表字段长度总和接近 / 超过半页上限
    • ③ 表中有很多长文本、富文本、备注
  • 开启Long Row 带来什么问题?
    • ① 性能变差
    • ② 不能随便建索引
    • ③ 不适合频繁更新的大字段
    • ④ 只对当前表生效
  • 超级精简总结
  • 核心查询SQL
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档