登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  文章 >  软件教程

DBeaver CSV 导入现有表实战:列映射、NULL 标记与行数验收

来源:17golang原创

时间:2026-08-10 17:25:46 261浏览 收藏

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 配置问题。

DBeaver Import Data 向导选择 orders.csv 并预览中文、时间和 NULL 标记

从目标表入口启动 Import Data

在 Database Navigator 里找到目标 schema 下的 orders 表,右键选 Import Data,源类型选 CSV,挑好文件进入下一步。导入现有表时,目标表会从入口自动确定,这里还是要在向导里再次确认连接、schema 和表名,避免选错库。

如果 CSV 首行已经写了列名,打开“首行作为列名”的对应选项,让预览区显示 order_idcustomer_name 等字段。要是预览第一行还是具体数据,先别继续,后续列映射会整体错一行。

列映射和 NULL 规则要逐项核对

进入列映射页面后,逐列确认源字段和目标字段的对应关系。常见错误是把 paid_at 映射到金额字段,或者 CSV 列顺序变了之后还按位置直接导入。优先按列名匹配,再核对类型:

CSV 源列目标列检查点
order_idorders.order_id整数、主键、不重复
customer_nameorders.customer_nameUTF-8 中文可读
remarkorders.remark空字符串不误转 NULL
paid_atorders.paid_at时间格式与数据库一致
refund_reasonorders.refund_reason__NULL__ 转成真正 NULL

NULL 标记要在导入设置里统一配置。如果下游约定 __NULL__ 代表数据库 NULL,就全程用同一个值,别直接把它当普通字符串写进字段。反过来,CSV 里两个连续分隔符代表的空文本,要按业务规则决定是否保留为空字符串。

DBeaver CSV 导入列映射页面核对 order_id、paid_at 与 NULL 转换规则

提交前后都保留可复查的记录

开始导入前,先记下来目标表当前的行数:

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;

验收至少要做三件事:

  1. 目标表行数的增量等于成功导入的数据行数。
  2. 主键 10021、10022 都能正常查到,没有重复插入。
  3. 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 规则和提交后的数据库查询缺一不可,尤其是最后一步校验,能把看似成功的导入任务,变成可复查的可信结果。

[] []
声明:本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>