DBeaver导入CSV时跳过第一行(表头)的关键设置在“CSV配置”页,需将Header line number设为1;若CSV无真实表头则设为0,并注意编码(如GBK/UTF-8无BOM)与引号匹配。

CSV导入时跳过第一行(表头)的设置位置
导入 CSV 时默认会把第一行当数据读,结果表里多出一条“列名”记录——这是因为 DBeaver 没自动识别表头,也没帮你跳过。关键设置不在“文件选择页”,而在下一步的 CSV 配置 页面里。
进入导入向导后,选完文件、点“下一步”到“CSV 配置”页,找到这三项必须核对:
-
Header line number:填1表示第一行为表头(即跳过它);填0表示无表头,全部当数据 -
Quote character:多数 CSV 用"包裹含逗号或换行的字段,保持默认双引号即可;若你文件用单引号或没引号,得手动改 -
Escape character:一般不用动,除非字段里真有反斜杠转义场景
如果表头行本身带 BOM(比如 UTF-8 with BOM),Header line number 填 1 可能仍会错判——此时先用文本编辑器另存为“UTF-8 无 BOM”再导入更稳。
表头字段名和数据库列名不匹配怎么办
即使跳过了表头行,DBeaver 还是可能映射错字段:比如 CSV 里是 user_name,但表里叫 username,向导不会自动对齐,而是按顺序硬绑。结果数据全插歪了,还查不出错。
在“列映射”页(CSV 配置之后那步),你会看到左右两栏:左边是 CSV 的列名(来自表头),右边是目标表字段。操作要点:
- 别信“自动匹配”按钮——它只按名字字符串完全相等才连,
user_id和id不会自动认成同一列 - 手动拖拽或点击下拉框逐个指定,尤其注意时间字段:
created_at要对应表里的create_time,类型还得是timestamp或datetime - 不想导入某列?右边选
skip,不是留空——留空会被当成插入 NULL
导入后发现表头被当数据插进去了,怎么补救
已经执行完导入、表里多了条“id,name,age”这种记录?别删表重来。直接 SQL 清理最省事:
DELETE FROM your_table_name WHERE id = 'id' AND name = 'name';
但前提是这行值在业务数据中绝不可能真实出现。更稳妥的做法是加条件限定:
- 如果表有自增主键且刚建好,这条脏数据大概率是第一条(
id = 1),可:DELETE FROM your_table_name WHERE id = 1; - 如果无法确定 ID,用字符串特征判断:
DELETE FROM your_table_name WHERE name REGEXP '^[a-zA-Z_]+$' AND age REGEXP '^[0-9]+$' LIMIT 1;(仅适用于表头明显由纯字母/数字组成的情况)
下次导入前,在 CSV 配置页盯死 Header line number,比事后清理快十倍。
为什么有时勾了“Header line number = 1”还是没跳过
常见原因就两个:文件实际没表头,或 DBeaver 解析时被编码干扰了。
先用命令行确认真实结构:
head -n 2 data.csv
如果输出第一行是纯英文字段名(如 id,name,phone),说明真有表头;如果第一行就是数据(如 1001,"张三",13800138000),那 Header line number 就该设为 0。
另一个隐蔽坑:CSV 保存时用了 Excel 默认的 GBK 编码,但 DBeaver 导入页却选了 UTF-8——这时表头行可能被解析成乱码,导致 Header line number 判定失效。解决方法:在“CSV 配置”页顶部,先把 Encoding 改成 GBK 再试。


















