Navicat 15 不支持为单表建表语句单独指定 SQL 版本导出,仅在「数据传输」或「导出向导」中对 MySQL/MariaDB 整库导出提供版本选项,且该功能对 DB2、PostgreSQL、SQL Server 等数据库不可用或禁用。
navicat 15 本身不支持为建表语句单独指定 sql 版本导出——它只在「数据传输」或「导出向导」中对整个数据库/表的导出过程提供版本选项,且该选项仅对 mysql / mariadb 生效,对 postgresql、oracle、sql server 等其他数据库类型完全不可见或无效。
如果你看到「导出为 SQL 文件」时有「MySQL 5.7」「MySQL 8.0」等下拉菜单,那说明你当前连接的是 MySQL 数据库;如果是 DB2、PostgreSQL 或 SQL Server,这个下拉框压根不会出现,或者显示为灰色禁用状态。
为什么“SQL 版本选择”只对 MySQL 有效?
Navicat 的 SQL 版本适配逻辑是硬编码在 MySQL 驱动模块里的,目的是解决高版本语法(如 JSON 类型、DESCRIBE 替代 EXPLAIN、默认字符集声明方式)在低版本 MySQL 上报错的问题。其他数据库的语法差异更大、兼容策略更复杂,Navicat 没有为它们实现类似机制。
- PostgreSQL:不提供版本选项,导出的
CREATE TABLE默认用当前连接的 PG 版本语法(如GENERATED ALWAYS AS IDENTITY),低版本 PG(如 10.x)可能无法执行 - SQL Server:导出的
datetime2、SEQUENCE等特性无法降级为datetime或IDENTITY,也没法选版本 - DB2:如知识库所述,
导出为 SQL 文件功能直接灰色不可用,根本进不去版本选择环节
MySQL 场景下怎么真正用上版本选项?
只有通过「数据传输」或「导出向导」导出整个表/数据库时,才可能触发版本选择。右键单表 →「转储 SQL 文件」或「SQL 生成」出来的建表语句,不走版本适配流程,永远按当前连接的 MySQL 实例版本生成。
- 正确路径:右键数据库 →「数据传输」→ 目标选择「另一个 MySQL 连接」→ 下一步 → 在「高级」页签里勾选「导出为 SQL 文件」并展开「SQL 格式」下拉菜单
- 导出单表结构时,若想控制版本,必须先建一个指向目标低版本 MySQL 的新连接,再用该连接执行「数据传输」或「导出向导」
-
mysql -V查到目标版本是5.6.41,就选「MySQL 5.6」;选「MySQL 5.7」导出的DEFAULT CHARSET=utf8mb4在 5.6 会报错
绕过 Navicat 做跨版本建表语句适配的实操建议
当 Navicat 的版本选项不够用(比如要迁移到比当前连接版本更低的 MySQL,或导出给他人部署用),最稳的方式是人工干预生成的 SQL:
- 先用 Navicat 导出原始
CREATE TABLE(右键表 →「SQL 生成」→「仅结构」) - 手动替换不兼容语法:
json→text,utf8mb4_0900_as_cs→utf8_general_ci,ALGORITHM=INSTANT整行删掉 - 用正则批量处理:
ENGINE=InnoDB\s+ROW_FORMAT=DYNAMIC→ENGINE=InnoDB(适配 MySQL 5.5) - 对时间字段,把
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP拆成两个独立子句(老版本不支持复合写法)
Navicat 的版本选项是个便利开关,不是万能转换器;真正需要精确控制语法时,得靠人眼 + 文本工具 + 目标版本手册——尤其当你要把 MySQL 8.0 的建表语句塞进 5.5 实例里,Navicat 给的「MySQL 5.5」选项也大概率漏掉几个关键点。


















