DBeaver 怎么把 CSV 导入现有表:列映射、NULL 与提交验证
来源:17golang原创
时间:2026-08-10 17:19:50 197浏览 收藏
DBeaver 把 CSV 导入现有表,最容易出错的地方不是选文件,而是列名对不上、空值被当成普通文本,以及导入完没核对实际写入的行数。稳妥的做法是先准备一份带表头的待导入文件,在 Data Transfer 向导里明确源列和目标列的对应关系,再把 __NULL__ 映射成数据库 NULL,最后用导入前后的行数和抽样记录做校验。
- 从目标表右键点选 Import Data,选 CSV 作为源文件进入 Data Transfer 向导。
- 导入前先核对列名、数据类型和目标表主键,不要只看预览行就往下走。
- 把约定好的
__NULL__识别为 NULL,空字符串则保留为空文本。 - 提交后用写入行数、主键范围和一条 NULL 记录完成三点验收。
先准备一份能暴露问题的 CSV
别拿只有英文和数字的测试文件验证导入。比如做订单补录的场景,至少放一条中文、一条空备注、一条明确的 NULL 标记和一个时间字段:
order_id,customer_name,remark,paid_at,refund_reason 10021,张宁,改地址,晚一天发货,2026-08-01 09:13:22,__NULL__ 10022,林舟,,2026-08-01 10:05:40,客户主动取消
目标表可以是 orders,其中 order_id 是主键,paid_at 是时间字段。导入前先确认测试用的订单号 10021 和 10022 不会和已有订单重复,不然后续看到的失败可能是主键冲突,而非 CSV 配置问题。

从目标表入口启动 Import Data
在 Database Navigator 里找到目标 schema 下的 orders 表,右键选 Import Data,源类型选 CSV,挑好文件进入下一步。导入现有表时,目标表会从入口自动确定,这里还是要在向导里再次确认连接、schema 和表名,避免选错库。
如果 CSV 首行已经写了列名,打开“首行作为列名”的对应选项,让预览区显示 order_id、customer_name 等字段。要是预览第一行还是具体数据,先别继续,后续列映射会整体错一行。
列映射和 NULL 规则要逐项核对
进入列映射页面后,逐列确认源字段和目标字段的对应关系。常见错误是把 paid_at 映射到金额字段,或者 CSV 列顺序变了之后还按位置直接导入。优先按列名匹配,再核对类型:
| CSV 源列 | 目标列 | 检查点 |
|---|---|---|
| order_id | orders.order_id | 整数、主键、不重复 |
| customer_name | orders.customer_name | UTF-8 中文可读 |
| remark | orders.remark | 空字符串不误转 NULL |
| paid_at | orders.paid_at | 时间格式与数据库一致 |
| refund_reason | orders.refund_reason | __NULL__ 转成真正 NULL |
NULL 标记要在导入设置里统一配置。如果下游约定 __NULL__ 代表数据库 NULL,就全程用同一个值,别直接把它当普通字符串写进字段。反过来,CSV 里两个连续分隔符代表的空文本,要按业务规则决定是否保留为空字符串。

提交前后都保留可复查的记录
开始导入前,先记下来目标表当前的行数:
SELECT COUNT(*) AS before_count FROM orders; SELECT order_id, refund_reason FROM orders WHERE order_id IN (10021, 10022);
确认预览行数和 CSV 实际数据行数一致后再提交。任务完成提示只代表向导流程走完了,不代表每一行都符合业务预期。重新查询刚导入的主键范围,重点看中文、时间和 NULL 字段:
SELECT order_id, customer_name, remark, paid_at, refund_reason FROM orders WHERE order_id BETWEEN 10021 AND 10022 ORDER BY order_id;
验收至少要做三件事:
- 目标表行数的增量等于成功导入的数据行数。
- 主键 10021、10022 都能正常查到,没有重复插入。
- 10021 的
refund_reason是数据库真正的 NULL,10022 的备注和时间和源文件完全对应。
导入失败时先定位问题层级
- 预览就乱码:先检查 CSV 的文件编码,不用上来就改数据库字符集。
- 列整体错位:检查分隔符、首行表头识别和引号包裹规则。
- 时间字段报错:统一 CSV 的时间格式,确认目标列是否允许时区或秒数的精度差异。
- 主键冲突:先查目标表里是不是已经存在同一个
order_id,再决定是跳过、更新还是换批次导入。 - NULL 变成普通文字:回到 NULL 标记设置页面,确认
__NULL__没有被当成普通字符串写入库。
这里不用急着重复提交。先保存失败任务的错误行和日志,修正同一批 CSV 的问题后再导入,不然很容易把已经成功写入的部分再次重复插入目标表。
常见问题:DBeaver 导入 CSV 到现有表
为什么 CSV 预览正常,提交后中文却显示不对?
预览只说明 DBeaver 当前读取文件的方式正常,还要检查目标连接和数据库字符集;提交后直接查询目标表里的中文字段才能完成最终验证。
空字符串和 NULL 应该怎么区分处理?
用约定的标记表示 NULL,例如 __NULL__,连续分隔符生成的内容保留为空字符串。两者业务含义不同,导入规则也要明确记下来。
导入前需要关闭主键检查吗?
通常不建议这么做。主键冲突是很重要的输入质量信号,先清理重复数据或者选明确的更新策略,比临时关闭约束更容易后续追溯问题。
怎么判断导入没有少行?
比较 CSV 实际数据行数、导入任务提示的成功行数和目标表导入前后的行数增量;如果三者不一致,再去查看错误行日志和重复主键记录。
导入完成的最小核对清单
CSV 导入完成后,把源文件名、目标表、主键范围、成功行数、编码和 NULL 标记写进操作记录。下次重跑的时候,其他人可以先判断这批数据是不是已经落库,再决定要不要继续操作。
- 源文件表头、编码、分隔符和预览行数已经确认无误。
- 每个源列都映射到正确的目标列,主键处理策略明确。
- 中文、时间、空字符串和 NULL 字段各抽查至少一条记录。
- 导入前后行数与主键范围已经记录,没有直接重复提交。
DBeaver 导入 CSV 的核心,是从“文件能被读取”推进到“数据落库正确”。正确的入口、列映射、NULL 规则和提交后的数据库查询缺一不可,尤其是最后一步校验,能把看似成功的导入任务,变成可复查的可信结果。
-
480 收藏
-
316 收藏
-
177 收藏
-
485 收藏
-
352 收藏
-
245 收藏
-
261 收藏
-
108 收藏
-
169 收藏
-
125 收藏
-
177 收藏
-
218 收藏
-
383 收藏
-
140 收藏
-
439 收藏
-
490 收藏
-
151 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习