Navicat 16 的 .psc 备份文件无法跨平台迁移,仅限同版本、同操作系统、同数据库类型使用;跨平台必须用带四项设置的 SQL 脚本,并修正路径、字符集、DEFINER 等陷阱。

Navicat 16 的本地备份文件(.psc)无法在 Windows 与 Mac 之间无损迁移——它根本不是为跨平台设计的。 你拷过去双击打不开、导入报错、或还原后表结构错乱,都是正常现象。真正能跨平台复用的只有 SQL 脚本,而 .psc 文件只在「同版本 + 同操作系统 + 同数据库类型」的 Navicat 实例里有效。
为什么 .psc 文件跨平台必失败
.psc 是 Navicat 自研加密二进制格式,不是通用归档。它内部硬编码了大量平台相关上下文:
- Windows 上生成的 .psc 会嵌入 NTFS 权限标记和注册表路径引用,Mac 加载时直接跳过校验段导致解析中断
- macOS 版 Navicat 16 使用的是 Apple CryptoKit 加密密钥派生逻辑,Windows 版用的是 BCryptGenRandom,解密密钥不互通
- 即使强行用 hex 编辑器删掉头部平台标识字段,还原时仍会因时间戳精度差异(Windows FILETIME vs macOS mach_absolute_time)触发校验失败
- 备份时若启用了「压缩」或「加密密码」选项,跨平台导入后大概率卡在「Decrypting backup...」不动,进程 CPU 占用 100% 持续 5 分钟以上
真正可迁移的替代方案:SQL 导出必须带这 4 个设置
要让 Windows 导出的 SQL 在 Mac 上无错导入,导出向导 里这四个勾选缺一不可:
Windows 桌面自动化技能,支持鼠标控制(移动/点击/拖拽/滚轮/截图)、键盘输入(文字输入/按键/组合键)、窗口管理(查找/聚焦/最大化/最小化/关闭/移动)、截图并发送文件。提供两种截图方式:Python pyautogui 截图(集成在自动化流程中)和 PowerShell + .NET 零依赖截图(支持区域截图和多显示器)。当用户需要自动化 Windows 桌面操作、控制鼠标键盘、管理窗口、执行 GUI 自动化任务、截图发送文件时使用。
- 显式勾选
导出数据(默认只导结构,不勾就只有 CREATE TABLE,没有 INSERT) - 点开
高级→ 勾选添加 DROP TABLE IF EXISTS(否则目标库已有表时直接中断) -
字符集设为utf8mb4(不是utf8,Mac 上 MySQL 8.0 默认用utf8mb4_0900_as_cs,编码不匹配会导致 emoji 变 ?) -
兼容性模式选MySQL 5.7+(Windows 上 Navicat 16 默认按 5.7 生成语法,Mac 上 MySQL 8.0+ 对DEFAULT CURRENT_TIMESTAMP解析更严格)
导入前必须手动修正的三个路径陷阱
即使 SQL 文件本身没问题,Mac 上 Navicat 导入时仍可能静默失败:
- 导入时若勾选了
执行前清空目标数据库,但目标库名含连字符(如user-service),Navicat 会把连字符当减号解析,报错Unknown database 'user'—— 必须改用反引号包裹:`user-service` - SQL 文件里若含
LOAD DATA INFILE '/tmp/data.csv'这类语句,Mac 上路径需改为'/private/tmp/data.csv'(macOS 的 /tmp 是 /private/tmp 符号链接) - 如果源库用了
DEFINER=`admin`@`192.168.%`,Mac 导入时会因用户不存在报错;应提前在 SQL 文件开头加SET SESSION sql_mode='NO_ENGINE_SUBSTITUTION';并替换所有 DEFINER 为CURRENT_USER
团队协作时最容易被忽略的一点
很多人导出 SQL 后只检查了能否导入,却没验证 存储过程 和 事件调度器 是否真能运行。Navicat 16 在 Windows 上导出的存储过程,默认带 DELIMITER $$ 块,但 Mac 上 MySQL 客户端(尤其是通过 Navicat 内置终端执行时)对分隔符识别不稳定。最稳妥的做法是:导出后手动把每个 $$ 替换为 ;,并在文件开头加一行 DELIMITER ;。否则过程创建成功,调用时却报 PROCEDURE not exists —— 因为实际没建进去。

















