DBeaver查询结果默认只读,需启用编辑模式、预处理Excel为文本格式、使用高级粘贴、处理空值、关闭自动提交后手动提交,大批量应改用导入向导。

直接粘贴进查询结果表格会失败,因为 DBeaver 默认禁用编辑模式
你在 DBeaver 查询结果窗口里选中一堆行、按 Ctrl+V,大概率什么都不会发生,或者弹出“只读”提示——这不是 bug,是默认安全策略。查询结果集默认以只读方式打开,防止误操作写入脏数据。
要让粘贴生效,必须先启用编辑模式:
- 执行一条
SELECT * FROM table_name LIMIT 100类查询(不能是带聚合、GROUP BY或子查询的复杂语句) - 在结果表格下方状态栏,确认看到「编辑模式已启用」或类似提示;若没看到,右键结果表格 → 选择「启用编辑模式」
- 点击某一行最左侧的空白单元格(出现铅笔图标),再按
Ctrl+V粘贴 Excel 内容(需严格对齐列数)
Excel 数据必须预处理成纯文本格式,否则前导零/日期/科学计数法全乱
直接从 Excel 复制粘贴,00123 可能变成 123,2024-05-01 可能被识别为日期对象并转成毫秒时间戳,1.23E+08 会被当成数字自动展开。DBeaver 不解析 Excel 格式,它只接收剪贴板里的纯文本流。
正确做法是提前在 Excel 中统一设为文本格式:
- 全选目标列 → 右键「设置单元格格式」→ 选「文本」
- 对已有数值,需双击单元格再回车,强制转为文本(否则格式设置不生效)
- 粘贴前,在 DBeaver 结果表里右键 → 「高级粘贴」→ 勾选「插入粘贴」,避免覆盖非空行
粘贴后报错 “Column 'xxx' cannot be null”,其实是空值没处理干净
DBeaver 把 Excel 里空白单元格、[NULL]、#N/A 都当普通字符串处理,不会自动映射为 SQL 的 NULL。数据库字段若设了 NOT NULL,这一列就直接报错。
解决方法只有两个:
- Excel 里把所有应为空的位置留空(删掉
[NULL]字样),不要填任何字符 - 粘贴进 DBeaver 后,手动选中那些单元格 → 按
Delete键清空(不是 Backspace),确保底层值为NULL而非空字符串
批量粘贴超过 100 行时,记得关掉自动提交,否则容易卡死或中断
DBeaver 默认开启「自动提交」,每粘贴一行就发一次 INSERT,1000 行就是 1000 次网络往返和事务开销。不仅慢,还可能因超时断连导致部分写入成功、部分失败,数据不一致。
务必提前设置:
- 菜单栏「编辑」→ 「首选项」→ 「数据库」→ 「SQL 编辑器」→ 取消勾选「执行后自动提交」
- 粘贴完成 → 点击工具栏
Commit按钮(绿色对勾图标)一次性提交 - 如果中途出错,点
Rollback(红色弯箭头)可全部回退
DBeaver 的粘贴写入本质是模拟人工逐行编辑,它不走导入通道,也不校验约束,所有数据类型、空值、长度限制都靠你肉眼核对。真正大批量或生产环境数据同步,应该用「导入数据」向导走 CSV + 映射流程,而不是依赖粘贴。


















