Navicat 17 无法直接将 .psc 转为 SQL,必须先用同版本还原至临时库再转储;需验证 .psc 真实性,区分明文SQL、加密包或物理备份,并注意字符集、SQL模式及对象缺失等隐性限制。

Navicat 17 无法直接将 .psc 文件“转换”为 SQL 文件——它没有解密或反向提取功能;唯一可靠路径是先还原到临时库,再用「转储 SQL 文件」导出。
确认 .psc 是否真的是 Navicat 生成的
很多人卡在这一步就错了:手里的 backup.psc 很可能根本不是 Navicat 产出的。打开它看开头几字节:
- 如果显示
CREATE DATABASE、INSERT INTO等明文 SQL → 实际是误标后缀的纯文本,直接重命名为backup.sql即可导入 - 如果显示
\x89PNG、\x1f\x8b或乱码 → 是加密压缩包(Navicat 自产)或物理备份(XtraBackup/mydumper),不能硬解 - 若用
tar -tf backup.psc能列出文件但内容不可读 → 大概率是 Navicat 加密格式,必须同版本还原
用同版本 Navicat 17 还原到临时数据库
这是不可跳过的中间步骤。Navicat 不提供“psc → sql”的直通按钮,所有声称能跳过这步的工具都不可信。
- 启动与生成该
backup.psc完全相同的 Navicat 17 版本(含 build 号,比如 17.0.12) - 新建一个临时数据库,如
temp_restore(不要用已有库名,避免冲突) - 进入「工具 → 备份管理器 → 还原备份」,选中
backup.psc,目标库指定为temp_restore - 还原成功后,右键
temp_restore→ 「转储 SQL 文件」→ 勾选「结构和数据」 - 务必勾选「包含 DROP TABLE」,否则导入时表已存在会被跳过
导出 SQL 时的关键参数设置
导出看似简单,但默认选项在跨环境迁移时极易失败:
- 字符集选
UTF8MB4,不是UTF8,否则中文可能乱码或截断 - 兼容模式选
MySQL 5.7(除非目标 MySQL 是 8.0+ 且确认用到了新语法) - 手动在导出前执行:
SET SESSION sql_mode = '',避免NO_ZERO_DATE等严格模式导致导入中断 - 导出的
.sql文件开头默认有CREATE DATABASE IF NOT EXISTS,但不会DROP DATABASE—— 若目标库已存在,需手动加DROP DATABASE xxx;在最前面
注意那些不会报错但会静默丢数据的点
最容易被忽略的不是操作步骤,而是隐性依赖:
-
backup.psc若是在勾选「仅结构」或「仅数据」的情况下生成的,还原出来的temp_restore就不完整,导出的 SQL 也缺内容 - 触发器、存储过程、事件不会包含在
backup.psc中(Navicat 备份默认不包含这些对象),导出 SQL 后需单独补上SHOW CREATE TRIGGER等结果 - 如果原始备份用了 AES-256 加密,还原时输错一位密码,Navicat 会卡在进度条 99% 无任何提示,只能重试
真正麻烦的从来不是“怎么点”,而是你手里那个 .psc 的来源是否清晰、版本是否可控、以及有没有权限访问同版本环境来走完还原+导出这个闭环。跳过其中任一环,所谓“转换”都是在碰运气。


















