先手动建表再导入数据更可控,避免自动建表遗漏约束、索引、自增、注释等;导入时需确认表存在、权限正常、编码匹配、字段映射正确、空值处理得当,并注意类型、主键冲突及批量性能问题。

直接建好表再导入数据,比让 DBeaver 自动建表更可控——尤其当目标库已有约束、索引、触发器,或字段类型/默认值不能靠自动映射还原时。
先手动建表:用 SQL 或图形界面创建目标结构
别依赖「数据传输」向导里的“新建表”选项。它生成的 DDL 往往漏掉自增、注释、CHECK 约束、部分索引,PostgreSQL 还可能把 TEXT 映射成 CHARACTER VARYING 而丢失语义。
- 推荐用 SQL 建表:右键目标连接 →「SQL 编辑器」→ 粘贴你确认无误的
CREATE TABLE语句(含字符集、引擎、主键、注释)→ 执行 - 图形界面建表也行,但注意:添加完所有列后,必须右键某列 →「设置主键」;自增列要勾选「标识列」或「序列」(PostgreSQL);保存前点「应用」,否则不生效
- 建完立刻刷新导航器,确认表出现在目标 schema 下,且字段数、类型、是否为空等和预期一致
导入数据:右键表 →「导入数据」,不是「数据传输」
数据传输 是跨库迁移(带源读 + 目标写),而 导入数据 是单向写入本地文件(CSV/Excel/SQL)到已存在表中。路径错一步,就变成重建表或连错库。
- 确保目标表已存在且可写:右键该表 → 看菜单里有没有「导入数据」,没有说明权限不足或表状态异常
- 文件编码必须匹配:CSV 导入前用编辑器确认是 UTF-8(无 BOM);DBeaver 向导里「字符集」选
UTF-8,否则中文全变??? - 字段映射要核对:向导第二步会列出源 CSV 列与目标表列的对应关系,默认按名称匹配。如果 CSV 没标题行,或列顺序不一致,必须手动拖拽调整,否则数据错位
- 空值处理留心:
NULL字符串(如 CSV 里写的是\N或空字符串)不会自动转成数据库NULL,得在向导里勾选「空字符串作为 NULL」
常见失败点:权限、类型、主键冲突
导入中途报错退出,90% 出在这三处,而不是文件格式问题。
- 目标表有
NOT NULL列,但 CSV 对应列全空,且没勾选「空字符串作为 NULL」→ 报Column 'xxx' cannot be null - 目标列为
TIMESTAMP或DATE,CSV 里时间格式是2026/11/03或2026-11-03 14:30,但 DBeaver 默认只认yyyy-MM-dd HH:mm:ss→ 提前用 Excel 或 sed 统一格式,或改用 SQL 脚本导入 - 目标表主键/唯一键已存在重复值,而导入策略是
INSERT(默认),不是INSERT OR IGNORE或ON CONFLICT DO NOTHING→ 改用「数据传输」并设替换策略,或先TRUNCATE表 - MySQL 用户注意:
sql_mode包含STRICT_TRANS_TABLES时,日期零值、超长字符串会直接拒写 → 临时执行SET sql_mode = ''再导入
批量大文件?绕过图形界面,用 SQL 脚本更稳
超过 10 万行的 CSV,用「导入数据」向导容易卡死或内存溢出,且无法重试局部失败块。
- 先导出为 SQL 插入脚本:用其他工具(如命令行
mysql -e "SELECT ..." | sed)生成带INSERT INTO ... VALUES (...),(...)的文件 - DBeaver 里右键目标连接 →「工具」→「创建新任务」→ 类型选「SQL 脚本」→ 添加该 SQL 文件 → 选目标连接 → 执行
- 关键参数:在任务配置里打开「继续执行错误语句」,避免单行语法错导致整批中断;批量大小保持默认 1000 行/批,别盲目调高
- 如果 SQL 文件含
CREATE DATABASE或USE xxx,删掉——DBeaver 任务不支持跨库切换,只作用于你选定的那个连接
真正麻烦的从来不是按钮在哪,而是建表时少点了一个「非空」勾选,或 CSV 里多了一个不可见的 \r,导致后续所有步骤都卡在无声的报错里。动手前花 30 秒看一眼目标表 DESCRIBE table_name 和 CSV 头三行,省下的调试时间够跑两次全量。

















