同步前必须确认三件事:MySQL版本兼容性、目标库用户是否具备ALTER权限、目标库是否存在同名但已手动修改的表。
同步前必须确认的三件事
navicat 本身不自动同步团队成员本地数据库结构,它只提供「一次性比对+执行」能力。所谓“团队同步”,本质是人驱动的协作流程,不是后台自动服务。你得先明确:谁是源(权威结构)、谁是目标(待更新方)、是否允许覆盖或仅追加。
常见错误现象:同步后表字段丢失、字符集报错 ERROR 1071、外键约束冲突——这些几乎都源于没提前核对三件事:
- 源库和目标库的 MySQL 版本是否兼容(例如源用 8.0 的
json类型,目标是 5.7 就会失败) - 两个库的默认字符集是否一致(
utf8mb4vsutf8是高频雷区) - 目标库账号是否具备
ALTER权限,且仅限需修改的表(生产环境严禁给navicat_prod账号DROP权限)
用“结构同步”向导做一次安全比对
别直接点“运行”,先看清楚 Navicat 究竟打算改什么。打开 工具 → 结构同步,按顺序填入:
- 源数据库:选团队公认的“基准库”,比如命名含
_master或_dev_latest的连接 - 目标数据库:选某位成员本地的开发库,别误选成生产库
- 点击
比较后,重点看“操作”列:带+是新增表/字段,→是修改,×是删除——任何×都要全员确认,尤其涉及历史数据表
再切到 DDL 比较 选项卡,逐行检查生成的 SQL。例如 MODIFY COLUMN name VARCHAR(255) 是否会截断已有数据,ADD COLUMN created_at DATETIME NOT NULL 是否缺少 DEFAULT 值导致失败。
部署时必须启用的两个选项
点击 下一步 进入部署脚本页,底部的 部署选项 弹窗里,这两个勾选不能省:
-
遇到错误时继续:避免一个字段失败就中断整个同步,方便事后定位问题语句 -
在执行前备份目标对象:Navicat 会自动生成CREATE TABLE ... AS SELECT备份,但注意它不备份数据——仅结构。如果目标表有重要测试数据,得先手动导出
脚本顺序也关键:Navicat 默认按依赖关系排序,但有时需人工调整。比如先删外键,再改字段类型,最后重建外键。点击 编辑脚本 可拖动语句位置,或复制到查询编辑器里加 /* 注释说明 */ 再执行。
同步后如何验证一致性
执行完不等于结束。真正容易被忽略的是验证环节:
- 用
SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'db_name'对比源和目标的总字段数 - 查关键表的
SHOW CREATE TABLE order_detail,肉眼比对ENGINE、CHARSET、COMMENT是否完全一致 - 让成员在本地跑一遍业务接口,重点观察 ORM 映射是否报
Unknown column 'xxx' in 'field list'
复杂点在于:Navicat 不校验索引顺序、触发器逻辑、存储过程参数签名。这些必须靠团队约定文档或 CI 脚本兜底,不能只依赖界面同步。


















