DBeaver导出时NULL默认转为空字符串,非bug而是设计行为;需手动配置nullString="NULL"才能显式区分NULL与空值,XLSX导出不支持Excel原生空白单元格。

导出时 NULL 变成空字符串,不是 bug,是默认行为。DBeaver 的 CSV/XLSX 导出器把 nullString 默认设为空字符串(""),所以数据库里的 SQL NULL 值在文件里就“消失”了——看起来像空白单元格,但你无法区分它是真 NULL、还是字段值本来就是空字符串 ''。
为什么导出后看不出哪些是 NULL?
因为 DBeaver 默认用空字符串表示 NULL,且不加引号、不标记、不保留类型信息。尤其在 CSV 中:col1,col2,col3 → abc,,def,中间那个空字段可能是 NULL,也可能是 '',单看文件无从判断。
- CSV 导出走的是纯文本流,
nullString控制所有NULL的文本呈现 - XLSX 导出虽能写入 Excel 的“空单元格”语义,但 DBeaver 默认仍用
""渲染,而非留空单元格(即不调用cell.setBlank()) - 如果你后续要用该文件做 ETL 或校验,混淆
NULL和''会直接导致数据逻辑错误
怎么让 NULL 显式显示为 "NULL" 字符串?
改 nullString 配置项即可,所有导出格式都认这个参数:
- 导出前,在导出向导最后一步点 “配置” → “编辑处理器属性”
- 添加或修改键值对:
nullString=NULL(注意大小写,建议全大写便于识别) - 导出 CSV 时,该设置会让
NULL变成字面量"NULL";若同时开了quoteAlways=true,则变成"NULL" - 导出 XLSX 时,它不会写进单元格类型为“空”,而是写入字符串
NULL,肉眼可查、筛选可得
想保留 Excel 的“真空单元格”而不是字符串?
目前 DBeaver 的 DataExporterXLSX 实现不支持将 SQL NULL 映射为 Excel 的 blank cell(即 Cell.CELL_TYPE_BLANK)。它一律走字符串渲染路径,哪怕你设 nullString="",也只是写入空字符串,不是清空单元格。
- 这意味着:即使你看到单元格“空”,它实际存储的是长度为 0 的字符串,不是 Excel 意义上的空白单元格
- 公式如
ISBLANK()会返回FALSE,COUNTA()会把它当非空计数 - 真正需要 blank cell 的场景(比如给财务系统喂数),必须先在 SQL 查询里用
CASE WHEN col IS NULL THEN NULL ELSE col END确保类型穿透,再配合外部工具(如 Python + openpyxl)后处理
最易被忽略的一点:导出配置里的 nullString 是全局生效的,但它只影响本次导出。如果你经常要区分 NULL,建议把常用配置保存为“导出模板”,否则每次都要手动填一次 nullString=NULL。











