Navicat设计表时点“SQL预览”可实时查看未保存的CREATE TABLE或ALTER TABLE语句,动态反映字段增删、类型调整、主键/索引等所有DDL修改;保存后预览清空,且不显示DML语句。
设计表时点“SQL预览”才能看到未保存的DDL
navicat 15 的“设计表”界面里,sql预览 是唯一能实时反映你所有结构修改(字段增删、类型变更、主键/索引调整等)的窗口。它不是静态快照,而是动态生成的 create table 或 alter table 语句——前提是还没点“保存”。一旦保存,该标签页内容立即清空,无法回溯。
常见错误现象包括:点完“保存”再回头找 SQL预览,发现空白;或误以为“对象信息 → DDL”也能显示修改过程,其实那个只展示当前已生效的结构。
- 必须在“设计表”编辑器中操作,不能从右键菜单直接进“对象信息”
-
SQL预览标签页默认可能被隐藏,注意右下角是否显示该选项卡(有些版本需手动展开) - 仅适用于 DDL 变更,不会出现
INSERT、UPDATE等 DML 语句
右键表名看“对象信息 → DDL”只显示当前生效结构
这个路径(右键表 → 对象信息 → DDL)输出的是数据库里**已存在**的表定义,和你在“设计表”里做的任何未提交修改无关。它本质是执行 SHOW CREATE TABLE(MySQL)或类似元数据查询的结果。
容易踩的坑:有人想靠这个确认自己刚改的字段类型是否生效,结果看到的还是旧定义——因为没保存;或者导出后发现缺外键、缺注释,其实是权限不足导致 Navicat 无法读取完整元数据(比如 MySQL 用户没授 SELECT 权限给 information_schema)。
- 若
DDL选项卡为空或报错,先检查连接用户是否有SELECT权限 - PostgreSQL 用户要注意:部分版本不自动包含
COMMENT ON COLUMN,即使原表有注释 - 导出前建议手动复制,不要依赖“导出为 SQL 文件”按钮——某些小版本存在编码丢失问题
不同数据库对 DDL 预览的支持程度不一致
MySQL 和 MariaDB 下 SQL预览 最稳定,能准确映射大多数修改;但 PostgreSQL 和 SQL Server 中,某些操作(如修改列默认值、重命名约束)可能不触发语句更新,或生成的语句语法不兼容目标环境。
例如:在 PostgreSQL 设计表里把 text 改成 varchar(255),SQL预览 可能只显示 ALTER TABLE ... TYPE,而没带 USING 转换逻辑,直接执行会失败。
- Oracle 用户注意:
SQL预览不支持ALTER TABLE ... MODIFY的在线重定义场景,语句可能省略ONLINE关键字 - SQLite 不支持“设计表”功能,自然也没有
SQL预览 - 如果预览语句里出现
/* unsupported */注释,说明 Navicat 识别到该操作无法用标准 DDL 表达
导出 DDL 前务必核对字符集与存储引擎
Navicat 15 默认按连接设置推断字符集和引擎,但 SQL预览 生成的语句未必显式写出 CHARACTER SET utf8mb4 或 ENGINE=InnoDB。如果你准备把语句同步到生产库,漏掉这些可能导致建表失败或乱码。
一个典型场景:开发库用的是 MySQL 8.0 + utf8mb4_0900_as_cs 排序规则,但 SQL预览 只写 utf8mb4,没带排序规则,生产库执行时报错。
- 手动在预览语句开头补上
SET NAMES utf8mb4;更稳妥 - 检查
CREATE TABLE末尾是否含ENGINE=...和DEFAULT CHARSET=... - 若用到分区表或全文索引,确认预览语句是否包含对应子句——有时 UI 操作成功了,但 DDL 没体现
实际用的时候,最常被忽略的是:你以为点“保存”就万事大吉,但真正要迁移结构,得在点击保存前完成复制。那几秒的 SQL预览 窗口,就是唯一一次看到“你想让它变成什么样”的机会。


















