能找回,前提是执行过:①按Ctrl+H/Cmd+H打开历史日志并选“全部”数据库;②检查LogHistory.txt文本日志;③查询navicat.db中query_text字段。未执行则无法恢复。

Navicat 16 中「未保存的复杂查询」能否找回,取决于你是否执行过它——只要按 F6 或点击「运行全部」执行过,就有大概率能找回;如果只是写完没点执行就关了窗口,那基本没戏。
确认历史日志窗口是否已打开且未被过滤
很多人以为没记录,其实是根本没点开那个面板。Navicat 16 的执行历史默认存在,但必须手动唤出才能看见:
-
Ctrl+H(Windows)或Cmd+H(macOS)直接呼出历史日志窗口 - 顶部菜单栏 → 工具 → 历史日志,效果相同
- 左上角数据库下拉框务必选「全部」,否则只显示当前连接的语句
- 时间范围默认是最近 7 天,复杂查询若是一周前写的,得点日历图标手动拉长
- 搜索框填的是 SQL 文本内容,比如搜
JOIN users ON orders.user_id比搜orders更准
检查 LogHistory.txt 文件是否存在并可读
这是 Navicat 16 最常被忽略的“兜底”路径,它不依赖设置开关,只要执行过就会追加写入(部分版本需首次启用历史日志后才开始生成):
- Windows 路径:
C:\Users\{用户名}\Documents\Navicat\Premium\logs\LogHistory.txt - macOS 路径:
~/Documents/Navicat/Premium/logs/LogHistory.txt - 文件是纯文本,每条记录含时间戳、连接名、数据库名、完整 SQL(含换行和缩进)
- 用记事本或 VS Code 打开后,
Ctrl+F搜关键词(如表别名、WITH RECURSIVE、特定字段名)效率更高 - 注意:该文件不会自动轮转,长期不用可能极大,建议定期清空或重命名归档
从本地 SQLite 数据库中提取原始 query_text
Navicat 16 使用 navicat.db 存储部分操作元数据,比 LogHistory.txt 更结构化,也更可能保留失败语句或带参数的变体:
- Windows 路径:
%AppData%\PremierSoft\Navicat Premium\profiles\default\navicat.db - macOS 路径:
~/Library/Application Support/PremierSoft/Navicat Premium/profiles/default/navicat.db - 用命令行执行:
sqlite3 navicat.db "SELECT query_text, created_time FROM query_history ORDER BY created_time DESC LIMIT 30;" - v16 后字段名统一为
query_text,不是旧版的sql_text;如果报错,先运行PRAGMA table_info(query_history);确认字段名 - 结果里可能含
/* navicat: auto-generated */注释,这类是界面操作生成的语句,可跳过;重点看手写的长段落
为什么有些语句死活找不到?关键限制条件
不是所有操作都会进历史,Navicat 16 的记录逻辑有明确边界,容易误判:
-
Ctrl+Enter、右键→「执行当前语句」、工具栏「执行」按钮 —— 这些都不会计入历史,只有F6和「运行全部」会 - Query Analyzer(仅 Windows)里的执行记录独立存储,重启后常丢失,且不与主历史互通
- 编辑器内 Ctrl+Z 只能撤销文字输入,对「已执行」无任何回溯能力
- 如果刚重装 Navicat 或迁移用户配置,
navicat.db和LogHistory.txt都是新文件,旧记录自然不存在 - 某些企业版策略会禁用日志写入,此时连
LogHistory.txt都不会生成
真正难找回的,永远是「写完没执行就关了」的那类;而只要执行过一次,Navicat 16 至少留了三处痕迹——窗口、文本日志、SQLite 表。别急着重写,先翻这三处,90% 的复杂查询都能捞回来。











