Navicat 16 不提供 ROW_FORMAT 可视化设置,因其属 InnoDB 内部只读参数;需用 DDL 手动指定 DYNAMIC;FIXED 仅适用于 MyISAM,InnoDB 默认即为 DYNAMIC。
navicat 16 本身不提供可视化界面来设置 mysql 表的 row_format(如 dynamic 或 fixed)。你无法在“表设计”或“表选项”对话框里找到下拉菜单直接选 dynamic —— 这个选项根本不存在。
为什么表结构界面里没有 ROW_FORMAT 下拉项
Navicat 的「表设计」视图只暴露 MySQL 官方文档中明确列为“用户可配置且有 GUI 映射”的选项,比如存储引擎、字符集、排序规则、注释等。ROW_FORMAT 属于 InnoDB 内部存储参数,MySQL 自 5.7 起已将其设为**只读提示值**(由 innodb_file_format、innodb_file_per_table 和建表语句隐式决定),不再允许通过 ALTER TABLE ... ROW_FORMAT= 随意切换(尤其在严格模式下会报错)。Navicat 尊重这一限制,故主动隐藏该字段。
想强制指定 ROW_FORMAT,只能手写 DDL
如果你确实需要创建或修改为 DYNAMIC 行格式(例如规避 COMPACT 下的前缀索引长度限制),必须绕过图形界面,用原始 SQL:
- 新建表时,在「查询编辑器」中执行:
CREATE TABLE t (id INT) ROW_FORMAT=DYNAMIC ENGINE=InnoDB;
- 修改现有表(仅当满足条件时才成功):
ALTER TABLE t ROW_FORMAT=DYNAMIC;
—— 注意:若表含全文索引、或innodb_file_format不是Barracuda,该语句会失败并报错ERROR 1005 (HY000): Can't create table或ERROR 1845 (HY000): Cannot change row format... - 导出表结构时,Navicat 默认不包含
ROW_FORMAT子句;如需保留,得勾选「导出 > DDL > 包含存储引擎和行格式」(该选项在 Navicat 16.0.19+ 版本中才出现,旧版无)
Dynamic 和 Fixed 在 MySQL 中早已不适用
这里有个关键事实容易被误导:FIXED 行格式仅对 MyISAM 有效,而 InnoDB 从不支持 FIXED;DYNAMIC 是 InnoDB 默认行格式(5.7+),但它的行为由 innodb_file_format=Barracuda 和 innodb_large_prefix=ON 共同控制。你在 Navicat 里看到的「引擎」下拉菜单选了 InnoDB,实际上就已经是 DYNAMIC 了——除非你显式用 ROW_FORMAT=COMPACT 建过老表。
真正影响日常使用的,其实是 innodb_page_size 和 innodb_log_file_size 这类服务端参数,它们决定行能否存放大字段(TEXT/BLOB)以及是否溢出到单独页。这些参数 Navicat 根本不让你调,也没法可视化。











