导出前必须用WHERE过滤NULL和空字符串,推荐WHERE column_name IS NOT NULL AND TRIM(column_name) != '';CSV需COALESCE防“NULL”显示;Excel导出虽显空白但类型易丢失;批量导出须手动为每表加过滤条件。
导出前用WHERE过滤NULL和空字符串
navicat本身不提供“跳过空值字段”的导出开关,导出结果是否含空值,完全取决于你执行的sql查询是否已排除。直接右键表→导出向导,会原样导出所有行,包括null和''(空字符串)。
正确做法是在查询中显式过滤:
- 过滤
NULL:用WHERE column_name IS NOT NULL - 过滤空字符串(仅对字符串类型):加
AND column_name != '' - 同时过滤两者(推荐):
WHERE column_name IS NOT NULL AND TRIM(column_name) != '',TRIM能干掉纯空格这类“伪空值”
注意:IS NULL对数值型、日期型有效;但''只对VARCHAR/TEXT等字符类型有意义,对INT或DATETIME列用= ''会隐式转换报错。
导出CSV时避免Excel把NULL显示为文字“NULL”
即使SQL里已过滤NULL,若导出格式选CSV,且源数据存在NULL(比如LEFT JOIN产生的),而你又没在查询里处理,Navicat默认把NULL导出为字符串NULL(不是空单元格),Excel打开后就真显示“NULL”二字。
解决方法只有两个:
- 在SQL里用
COALESCE(column_name, '')把NULL转为空字符串,再配合前面的WHERE过滤 - 导出后手动替换——不可靠,尤其字段含“NULL”作为正常业务值时(如用户昵称就是“NULL”)
别依赖导出向导里的“空字符串转为NULL”选项,那是为导入设计的,对导出无效。
导出Excel时NULL自动变空白,但要注意字段类型丢失
选.xlsx格式导出,Navicat会把NULL渲染为空单元格,Excel打开后看着干净。但这只是显示层行为,底层没做数据清洗。
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
隐患在于:
- 日期字段若为
NULL,导出后Excel可能识别成常规文本,后续无法参与日期计算 - 数字字段
NULL导出为空,但Excel默认当文本处理,求和时被忽略——表面看是空,实际影响聚合结果 - 如果导出前没用
WHERE过滤,只是靠Excel“隐藏空行”,那原始数据仍包含逻辑空值,分享给他人时极易误判
所以导出Excel也必须前置过滤,不能图省事只靠格式掩盖问题。
批量表导出时如何统一剔除空值行
右键多张表→导出向导→勾选“批量导出”,它不会帮你加WHERE条件。每张表都得单独处理。
高效做法是写脚本生成带过滤条件的查询:
- 查出所有目标表:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'your_db' - 对每张表,拼出类似
SELECT * FROM t1 WHERE col1 IS NOT NULL AND col2 != ''的语句(需人工确认哪些列需过滤) - 把每个查询结果分别用
导出结果按钮导出,而不是走表级导出向导
没有银弹。Navicat不解析业务语义,它只忠实地执行你写的SQL。所谓“不包含空值”,本质是你得先定义清楚——哪些列算空、空的边界是什么、0和'0'要不要排除。这些判断只能由人来做。

















