DBeaver默认不将空字符串转为NULL,需手动在列映射中设""或修改全局“Null value pattern”为"";SQL脚本导入须用NULLIF(col, '')显式处理。

默认不转,必须手动配置列映射或改全局设置,否则空字符串会原样写入数据库,不是 NULL。
导入向导里手动设列映射
在 DBeaver 的 CSV/Excel 导入向导中,到 “Columns mapping” 步骤时,每列右侧有 “Null value” 输入框。对需要转 NULL 的字段,填入 ""(两个英文双引号),代表把空字符串视作 NULL。注意不能填 '' 或 null,DBeaver 只认双引号包裹的空字面量。
- 该设置仅对本次导入生效
- 如果源数据含带空格的“伪空值”,比如
" ",需先清洗或额外加正则替换 - 勾选 “Skip empty lines” 不影响此映射,但能避免因空行导致的列错位
修改默认空值识别规则(全局)
进入 Preferences → Editors → Data Editor → Data formatting,找到 “Null value pattern” 项。默认是 NULL(大写),可改成 ""。这样后续所有导入、查询结果展示、复制粘贴都会把空字符串当 NULL 处理——但要注意:这会影响显示逻辑,比如原本查出来是 "" 的字段,在结果集里会直接显示为 NULL,可能掩盖真实数据问题。
- 该设置对已存在的连接生效,无需重启
- 不同数据库驱动对空字符串和 NULL 的语义处理不同,比如 MySQL 的
''和NULL在IS NULL判断中结果不同,改这里只是前端识别方式 - 建议仅在明确业务接受该映射时启用,开发环境慎用
SQL 脚本导入时绕过 GUI 的空值陷阱
若用 DBeaver 执行 INSERT 脚本导入(比如从 CSV 生成的批量 INSERT),空字符串不会自动转 NULL——脚本里写的是 '',数据库就真存 ''。此时得靠 SQL 层处理:
- 用
NULLIF(col, '')包裹目标字段,例如INSERT INTO t(x) VALUES (NULLIF(?, '')) - PostgreSQL 支持
COALESCE(NULLIF(col, ''), NULL),但冗余,NULLIF足够 - MySQL 8.0+ 同样支持
NULLIF;低于 8.0 需用CASE WHEN col = '' THEN NULL ELSE col END
真正容易被忽略的点是:DBeaver 的“空值识别”只作用于它控制的数据搬运路径(如 CSV 导入、结果集编辑),不改变数据库本身的约束和类型语义。哪怕界面显示为 NULL,底层字段如果是 NOT NULL 且没默认值,导入仍会失败——得提前确认表结构是否允许 NULL。











