Navicat 不支持原生定时导出 JSON,需通过“运行外部工具”调用脚本实现:Linux 用 mysql + jq,Windows 用 PowerShell + mysql.exe,并注意权限、绝对路径和 UTF8 编码。
Navicat 里导出 JSON 没有原生定时选项
navicat 本身不支持直接“定时导出为 json”——它的计划任务(scheduled tasks)只支持 sql 文件导出、备份、同步 和 导入 这几类操作,json 导出 不在列表中。所以想靠纯 navicat 界面点几下就自动跑 json 导出,行不通。
可行路径只有一条:用 Navicat 的「运行外部工具」能力,把导出逻辑交给命令行或脚本,再让 Navicat 定时触发它。
用 mysqldump + jq 实现 JSON 导出并定时执行
MySQL 原生不支持 SELECT ... INTO OUTFILE 'xxx.json',但可以用 mysqldump 输出 JSON 格式文本(5.7.22+ 支持 --result-file 配合 --tab 不够用,得靠管道转),再用 jq 或 Python 转成结构化 JSON。
-
mysqldump -u user -p'pass' --skip-extended-insert --compact db_name table_name > /tmp/table.sql先导出可读 SQL - 更实用的是用
mysqlCLI 直接查 +jq:mysql -u user -p'pass' -N -s -r -e "SELECT id,name,created_at FROM db.table" db | jq -R 'split("\t") | {id: .[0], name: .[1], created_at: .[2]}' | jq -s '.' > /path/to/export.json - 注意:
-N去列名,-s禁用表格格式,-r原始输出,-e执行语句 - 字段顺序必须和
jq索引严格对应,否则字段错位;含 NULL 时mysql输出为空字符串,jq会变成null或空串,需提前处理
Navicat 计划任务调用脚本的实操要点
Navicat 的「外部工具」本质是调用系统命令,所以你要先写好一个可执行脚本(如 export_json.sh),再在计划任务里填它的绝对路径。
- 脚本开头必须加
#!/bin/bash,且用chmod +x export_json.sh赋予执行权限 - Navicat 运行时默认工作目录不可控,所有路径务必用绝对路径:
/usr/bin/mysql、/usr/bin/jq、/home/user/export.json - 密码不能硬编码在脚本里,建议用 MySQL 配置文件
~/.my.cnf(权限设为600),内容:[client] user = your_user password = your_pass host = localhost
- Navicat 计划任务里「运行外部工具」的命令栏填:
/bin/bash /full/path/to/export_json.sh,不要带&或后台符号 - 执行失败时 Navicat 日志只显示「退出码非 0」,要查具体原因得进脚本加
set -x或重定向 stderr 到日志文件
Windows 下用 PowerShell + mysql.exe 替代方案
Windows 用户别硬套 bash,PowerShell 更稳妥,且能更好处理编码和空格路径。
- 确保
mysql.exe在系统 PATH 中,或在脚本里写全路径:C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe - PowerShell 示例(保存为
export.ps1):$sql = "SELECT id,name FROM db.table" $output = & "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -u"user" -p"pass" -N -s -r -e $sql "db" | ForEach-Object { $parts = $_ -split '\t' [PSCustomObject]@{id=$parts[0]; name=$parts[1]} } | ConvertTo-Json -Depth 1 $output | Out-File "D:\exports\table.json" -Encoding UTF8 - Navicat 计划任务中命令填:
powershell.exe -ExecutionPolicy Bypass -File "D:\scripts\export.ps1" - PowerShell 默认禁用脚本执行,
-ExecutionPolicy Bypass是必要参数,否则报错File cannot be loaded - 中文字段导出后乱码?MySQL 连接需加
--default-character-set=utf8mb4,PowerShell 控制台编码也要设为[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
Navicat 计划任务只是个触发器,真正的导出逻辑、错误恢复、字段映射、编码处理,都得靠你写的脚本兜底。很多人卡在权限、路径、编码这三关,而不是功能本身。










