Navicat 17“重复表”仅支持同一连接内操作,跨服务器或跨连接时该功能不可用;可靠方式是使用「工具→数据传输」并仅传结构,需勾选Drop target table、Auto-increment value及Foreign keys等选项。
Navicat 17 右键“重复表”只支持同连接内操作
跨服务器或跨连接时,“重复表”(duplicate table)功能直接不可用——它要求源表和目标库必须属于同一个 navicat 连接。如果你右键后没看到该选项,或点击后弹出“invalid connection”提示,说明当前不是同一连接上下文。这不是权限问题,而是设计限制:navicat 不允许在图形界面中通过此操作跨连接克隆。
真正能跨远程库复制结构的可视化方式只有「数据传输」
想把远程 MySQL 表结构复制到另一个远程数据库(哪怕同服务器不同账号),唯一可靠且无需手写 SQL 的路径是「工具 → 数据传输」。它底层走的是连接通道读取元数据,能自动适配目标库的 ENGINE、CHARSET、COLLATE,比右键导出 SQL 更稳。
- 左侧选源表,右侧选目标数据库节点(必须已建立有效连接)
- 点「高级」→ 取消勾选
Transfer data(只传结构) - 务必勾选
Drop target table if exists和Auto-increment value(否则新表自增从 1 开始) - 若源表有外键,必须勾选
Foreign keys;有中文注释,确认Comments已启用
为什么“复制表 → 粘贴表”在远程场景下大概率失败
这个操作默认调用 CREATE TABLE ... LIKE,而 MySQL 的 LIKE 语法不支持跨库引用(如 db1.table1 LIKE db2.table2 是非法的)。Navicat GUI 又不让你手动改 DDL,所以粘贴按钮会变灰,或点击后报 Cannot paste object to this location。
即使强行拖放表名到远程库节点,也会静默失败——Navicat 不校验目标连接是否可达,也不提示字符集/引擎缺失,建表语句里可能连 ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 都没写全。
容易被忽略的字符集与权限细节
远程库之间字符集不一致时,SHOW CREATE TABLE 拿到的语句如果直接执行,中文注释可能变成问号;更隐蔽的是,目标连接的 character_set_client 若为 latin1,哪怕建表语句写了 CHARSET=utf8mb4,字段定义里的注释仍会被转义丢损。
权限方面,Navicat 不报错,只在状态栏闪一下 Operation failed:你得确保目标库用户有 CREATE、ALTER、INDEX 权限,且对目标 schema 有写入权——特别是当目标库启用了 sql_mode = STRICT_TRANS_TABLES 时,缺 DEFAULT 值的字段会导致建表中断。


















