navicat计划任务必须基于导出向导生成的.nexp文件,不支持裸sql;需确保连接已测试通过、密码已保存、编码选utf-8 with bom、字段用双引号包裹、windows任务计划设为“不管用户是否登录都要运行”。
计划任务必须基于已保存的导出配置,不能直接跑sql
navicat 的计划任务不接受裸 sql 语句,它调度的是导出向导生成的完整任务定义(xml 文件),路径类似 c:\users\[user]\documents\navicat\mysql\profiles\[profile]\exporttasks\。你写个 select * from orders where created_at > curdate() 然后拖进计划任务——根本不会执行,连报错都没有,只会静默跳过。
正确做法是:先用「导出向导」走完全部流程,最后一步务必点击右下角的 保存 按钮,生成一个带 .nexp 后缀的文件(比如 daily_orders.nexp)。这个文件才是计划任务里能识别的“工作项”。
- 保存前必须测试导出一次,确保能成功写出 CSV 文件
- 连接必须已测试通过、密码已保存(勾选
Save password),否则计划任务运行时认证失败 - 导出配置里的连接名要和左侧连接列表中显示的**完全一致**(大小写、空格都不能差)
导出设置不填对,Excel 打开就是乱码或错列
Windows 下 Excel 默认不认纯 UTF-8,必须选 UTF-8 with BOM;字段含逗号、换行符时,不加双引号包裹就会劈开列。这两个选项漏一个,导出的 CSV 在 Excel 里基本不可用。
- 导出类型必须选
文本文件(不是 Excel、不是 SQL 文件) - Encoding →
UTF-8 with BOM(注意不是 “UTF-8” 或 “UTF-8 without BOM”) - 勾选
Enclose fields in double quotes,Text qualifier 确认为" - Field separator 保持
,即可,除非你明确知道数据里有大量逗号才换\t或|
定时不触发?大概率是 Windows 任务计划权限没调对
Navicat 内置计划任务底层依赖 Windows 任务计划程序(Task Scheduler),而它默认只在“用户登录时”运行。一旦锁屏、远程断开、或系统重启后没手动登录,任务就永远卡住,日志里只有一句模糊的 Connection failed。
解决方法是去 Windows 任务计划程序里找到 Navicat 自动生成的任务(名称通常含 Navicat Export),右键 → 属性 → 常规页签:
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
- 勾选
不管用户是否登录都要运行 - 同时勾选
不存储密码(此时数据库连接必须免密,比如用 socket 或已存凭据) - 如果连接必须输密码,那就只能选
只在用户登录时运行,并确保 Navicat 设置里关闭了Close background process when exiting
文件名想带日期?变量只在导出向导的“文件名”栏生效,路径必须写死
很多人在导出路径里写 C:\reports\orders_%DATE%.csv,结果每天覆盖同一个文件——因为 Navicat 17 **完全不解析环境变量或日期宏**。%DATE%、$HOME、{{now}} 全部无效。
唯一能动态化的只有导出向导第 3 步(目标文件)中的「文件名」输入框,且仅支持有限变量:$DATE、$TIME、$DATETIME(注意是美元符,不是百分号)。但路径本身必须是绝对路径,且目录需提前手动创建好。
- 例如填文件名:
orders_$DATETIME.csv,路径填:C:\reports\(不能是C:\reports\%DATE%\) - 如果真要按天建子目录,得用外部脚本先创建目录、再生成对应
.nexp文件、最后由计划任务调用 - 导出路径若写相对路径(如
./output/),任务会失败且无提示
实际跑通的关键点很窄:导出配置存对了、编码和引号设对了、Windows 计划任务权限调对了、路径写死了。少一个,任务就“看似在跑,实则没产出”。










