navicat 不支持直接导出查询历史为 sql 文件,因其历史记录存储于本地 sqlite 数据库(如 history.sqlite),且 navicat 15+ 版本默认加密 sql_text 字段,无法无损还原;需用 db browser 手动提取,若字段为空则无公开解密方式,推荐主动保存重要 sql。

Navicat 本身不提供“导出查询历史”为 SQL 文件的直接功能——历史记录仅保存在本地客户端数据库中,且格式非纯文本 SQL,不能一键导出。 你需要绕过界面限制,通过访问其内部 SQLite 数据库手动提取。
查清 Navicat 查询历史存哪儿
Navicat(Windows/macOS)把查询历史存在一个隐藏的 SQLite 文件里,路径取决于版本和系统:
- Windows:
%APPDATA%\PremierSoft\Navicat\YourVersion\History.sqlite(如Navicat16) - macOS:
~/Library/Application Support/PremierSoft/Navicat/YourVersion/History.sqlite
注意:YourVersion 是具体版本名(如 Navicat15、Navicat16),不是统一叫 Navicat;文件名固定为 History.sqlite,不是 history.db 或其他变体。
用 SQLite 命令行或 DB Browser 提取 SQL 内容
这个 SQLite 文件里,关键表是 query_history,字段包括 sql_text(实际语句)、timestamp、connection_name 等。直接查可能看到乱码或二进制 blob——因为部分版本会将 sql_text 存为压缩或加密字段(尤其是 Navicat 15+)。实操建议如下:
- 先用
DB Browser for SQLite(免费开源)打开History.sqlite,查看query_history表是否存在可读的sql_text字段;若字段显示为NULL或乱码,说明已被处理过 - 若字段可读,执行导出:
SELECT sql_text FROM query_history WHERE sql_text IS NOT NULL AND TRIM(sql_text) != '' ORDER BY timestamp DESC; - 复制结果 → 粘贴到文本编辑器 → 手动补上
;(Navicat 不自动加结尾分号)
为什么 Navicat 不支持原生导出?
这不是疏漏,而是设计取舍:查询历史定位是「快速回溯」,不是「脚本归档」。它混存了连接上下文、执行状态、甚至带高亮格式的富文本片段,导致无法无损还原为标准 SQL。更现实的替代方案有:
- 养成习惯:每次写完重要 SQL,立刻右键选中 →
Save As→ 存为.sql文件 - 用 Navicat 的
Query标签页 → 写完后点顶部菜单File → Export SQL File...(这是针对当前标签页内容,不是历史) - 对高频操作,改用外部编辑器(VS Code + SQLTools 插件)管理脚本,再通过 Navicat 的
Open SQL File加载
真正麻烦的不是找文件,而是面对 sql_text 字段为空时得接受:Navicat 15 及之后版本的历史记录已默认加密存储,目前无公开解密方式。备份唯一可靠路径,仍是主动保存而非事后导出。











