show engines; 列出所有存储引擎的运行时状态,但support列中yes仅表示引擎已加载,并非绝对可用;default为默认引擎,no表示未编译或显式禁用,disabled表示编译存在但被skip参数关闭,实际可用性需通过建表验证。

直接执行 SHOW ENGINES; 就能列出所有支持的引擎及其运行时状态,但结果不能直接等同于“能用”,得结合其他命令交叉验证。
为什么 SHOW ENGINES; 返回空或报错
这不是语法问题,而是环境限制:
- MySQL 服务根本没起来,SHOW ENGINES; 会报 ERROR 1064;
- 你连的是中间件(比如 ProxySQL、MaxScale)或只读代理,它们常默认屏蔽元数据命令;
- 云数据库(如阿里云 RDS)低配版可能只启用 InnoDB,其余引擎虽存在但 Support 显示为 NO 或 DISABLED;
- 某些引擎(如 ARCHIVE)在 MySQL 8.0.23+ 默认不编译,SHOW ENGINES; 根本不会出现它。
SHOW ENGINES; 的 Support 列到底什么意思
Support 值不是“装没装”,是“当前实例能不能用”:
- DEFAULT:当前默认引擎(通常是 InnoDB);
- YES:已加载且允许建表(但还得看权限和变量);
- NO:编译时未包含,或配置中明确禁用(如 skip_myisam);
- DISABLED:代码存在,但被 skip_* 参数关掉了——查 SELECT @@have_myisam; 返回 DISABLED 就是这种情况。
光看 SHOW ENGINES; 不够,还得验证实际可用性
哪怕某引擎显示 YES,也可能建表失败:
- MEMORY 引擎受 max_heap_table_size 控制,设为 0 时建表直接报 ERROR 1030;
- ARCHIVE 在 MySQL 8.0 默认禁用,即使 SHOW ENGINES; 显示 YES,执行 CREATE TABLE t (id INT) ENGINE = ARCHIVE; 仍会报 ERROR 1286;
- 更可靠的方法是实测建表:CREATE TABLE test_engine_check (id INT) ENGINE = MyISAM;,成功才说明真能用;
- 查默认引擎用 SHOW VARIABLES LIKE 'default_storage_engine';,别依赖建表语句里没写的 ENGINE= 子句——它可能被动态改过。
真正容易被忽略的点是:Support= YES 只代表“引擎模块加载了”,不代表“你有权限建表”“变量没锁死”“字符集兼容”。想确认能不能用,动手建一张最小表,比扫一眼 SHOW ENGINES; 可靠得多。











