DBeaver导出行数对不上主因是结果集限制、Excel格式兼容性问题、NULL/特殊值处理及分页设置;需调大Max rows、改用CSV验证、替换POI驱动、过滤特殊值并关闭分页。

导出后行数对不上,大概率不是漏数据,而是 DBeaver 在导出过程中跳过了某些行——原因集中在结果集限制、分页设置、导出格式兼容性这三处。
导出时被结果集限制截断
DBeaver 默认对查询结果集做硬性限制(通常是 200 行或 1000 行),这个限制只影响“显示”和“导出”,但不阻止 SQL 执行本身。你看到的“前 N 行”就是它能导出的全部内容。
- 检查方式:
SQL 编辑器右下角状态栏显示的“Rows: X of Y”,如果 Y 是个具体数字(比如1000),而实际应有上万行,说明已被截断 - 修改路径:菜单栏
Database → Driver Properties → Result Sets → Max rows to fetch,设为0(不限制)或足够大的值 - 注意:该设置是**连接级**的,不同数据库连接需分别配置;改完要重启连接才生效
导出 Excel 时因格式/驱动问题丢行
Excel 导出走的是 Apache POI 驱动链,不是纯文本流。一旦遇到合并单元格、超长字符串、特殊字符(如零宽空格)、或字段类型不一致(如一列里混了数字和空字符串),POI 可能静默跳过整行,且不报错。
- 验证方法:先导出为
CSV,对比行数是否一致;若 CSV 正常而 Excel 少行,基本锁定是 POI 兼容性问题 - 临时绕过:在导出向导中勾选
Use legacy Excel exporter(旧版导出器),它更保守,兼容性略好但不支持 .xlsx 的高级特性 - 根本解法:升级 DBeaver 到 23.3+ 版本(内置 POI 5.2+),或手动替换
plugins/org.jkiss.dbeaver.ext.office_*.jar为新版 POI
导出含 NULL 或特殊值的列导致整行失效
某些导出格式(尤其是 Excel 和 HTML)对 NULL、NaN、infinity 或超长二进制字段(如 BLOB)处理脆弱。DBeaver 不会报错中断,但可能跳过整行以保格式安全。
- 排查动作:执行
SELECT COUNT(*) FROM (your_query) t确认原始结果行数;再用SELECT * FROM (your_query) t WHERE col IS NULL检查 NULL 分布 - 导出前过滤:在 SQL 中显式排除可疑列,例如用
COALESCE(col, '')替换 NULL,或用CAST(col AS TEXT)统一类型 - 关键细节:HTML 导出对
、>字符极其敏感,未转义就可能导致解析失败并丢后续所有行
最容易被忽略的一点:DBeaver 的“导出”按钮默认只导出当前页结果(如果你开了分页),而不是全部结果集。哪怕你没手动翻页,只要启用了分页模式(Result Sets → Page size > 0),导出就只取第一页。这个开关藏得深,且没有视觉提示,必须进设置里确认。











