SHOW ENGINES 返回当前MySQL实例支持且启用的存储引擎列表,含引擎名、是否默认、事务/XA/保存点支持等;Support列中YES表示可用,DEFAULT为默认引擎,DISABLED表示被显式禁用,NO表示未编译。

mysql show engines 返回什么结果
执行 SHOW ENGINES; 后,MySQL 会列出当前实例编译支持且已启用的所有存储引擎,每行包含引擎名、是否默认、是否支持事务、是否支持XA、是否支持保存点等关键状态。重点看 Support 列:值为 YES 表示可用,DEFAULT 表示当前默认引擎,NO 或 DISABLED 表示不可用(可能因配置禁用或未编译)。
为什么 InnoDB 显示 DISABLED 而不是 NO
DISABLED 意味着引擎代码存在,但被显式关闭;NO 表示根本没编译进 mysqld。常见原因:
- my.cnf 中写了
skip-innodb(旧版本)或innodb=OFF(5.7+) - 启动时加了
--skip-innodb参数 - 内存不足导致初始化失败(
innodb_buffer_pool_size设得过大) - datadir 权限问题,InnoDB 无法读取 ibdata1
查错误日志比看 SHOW ENGINES; 更直接:mysqld 启动时若跳过 InnoDB,日志里会有类似 InnoDB: Disabled 的提示。
如何确认当前表实际用的引擎
SHOW ENGINES; 只告诉你“能用哪些”,不反映具体表用了哪个。要查真实情况:
- 查单个表:
SHOW CREATE TABLE <code>orders; —— 结果里ENGINE=InnoDB那部分就是实际引擎 - 查所有表:
SELECT table_name, engine FROM information_schema.tables WHERE table_schema = '<code>mydb'; - 注意:视图(VIEW)没有引擎,查出来是
NULL
别依赖建表语句里的 ENGINE= 子句——如果建表时没写,它会用当前数据库默认引擎,而这个默认值可能被 default_storage_engine 动态改过。
show engines 在不同 MySQL 版本的差异
8.0.23 起,FEDERATED 引擎默认不再编译;5.7 开始 MyISAM 仍存在但不推荐用于新表;8.0 默认禁用 ARCHIVE 和 BLACKHOLE(除非显式启用)。更关键的是:
- MySQL 8.0.11+ 默认字符集是
utf8mb4,某些老引擎(如CSV)对多字节字符支持弱,建表可能静默降级 -
performance_schema不是一个可选引擎,它始终存在且不能禁用,SHOW ENGINES;里看到它Support=YES是正常的 - Percona Server 或 MariaDB 的输出字段更多(比如带
Comment描述),原生 MySQL 没这列
真正容易被忽略的是:即使引擎显示 YES,也不代表它能正常创建表——比如 MEMORY 引擎在 max_heap_table_size 设为 0 时,建表会报错 ERROR 1030 (HY000): Got error 12 from storage engine,而不是引擎不可用。


















