能,SHOW CREATE TABLE 输出的第二列末尾ENGINE=InnoDB等明确显示当前表实际引擎,比SHOW TABLE STATUS更权威,优先以此为准。

SHOW CREATE TABLE 能直接看到引擎配置吗
能,但得看清楚输出里哪一行是关键信息。SHOW CREATE TABLE 返回两列:Table 和 Create Table,真正有用的只有第二列。引擎信息就藏在 CREATE TABLE 语句末尾的 ENGINE=InnoDB(或 MyISAM 等)这部分,不是默认值,是当前表实际生效的配置。
常见误区是只扫一眼建表语句开头,忽略结尾的 ENGINE、CHARSET、COLLATE 等子句。比如执行 SHOW CREATE TABLE user; 后,结果里最后一行类似:
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
这就是真实引擎和字符集配置,不依赖 my.cnf 里的全局设置。
为什么 SHOW CREATE TABLE 显示的 ENGINE 和 SHOW TABLE STATUS 不一致
这种情况极少,但一旦出现,基本说明表处于异常状态——最常见的是表损坏或 ALTER TABLE 中断后残留元数据不一致。
-
SHOW TABLE STATUS LIKE 'user'查的是存储引擎层缓存的元数据,可能滞后 -
SHOW CREATE TABLE读的是数据字典(MySQL 8.0+)或 frm 文件(5.7 及以前),更权威 - 如果两者
Engine字段不同,优先信SHOW CREATE TABLE;再用CHECK TABLE user验证表健康度 - 极少数情况是分区表,主表显示
ENGINE=partition,但每个分区实际引擎可能不同,这时SHOW CREATE TABLE会列出所有分区定义,需逐行查看
MySQL 8.0+ 下 SHOW CREATE TABLE 不显示 COMMENT 怎么办
它其实会显示,但前提是建表时用了 COMMENT 子句,且不是被后续 ALTER TABLE ... COMMENT 修改过的。MySQL 8.0 对数据字典做了重构,部分通过 ALTER 添加的表级注释可能不会回写到 CREATE TABLE 语句中。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
稳妥查法是组合使用:
-
SHOW CREATE TABLE user—— 看原始建表时的COMMENT -
SELECT TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA='db_name' AND TABLE_NAME='user'—— 查当前生效的注释,含后期修改 - 字段注释则必须查
information_schema.COLUMNS,SHOW CREATE TABLE只显示建表时写的字段COMMENT,不更新
用 mysqldump 导出建表语句比 SHOW CREATE TABLE 更可靠吗
不更可靠,只是用途不同。mysqldump --no-data db_name table_name 输出的确实是 CREATE TABLE 语句,但它默认加了 IF NOT EXISTS,并可能带上 /*!40101 SET NAMES utf8mb4 */ 这类兼容性指令,干扰对纯结构的理解。
真要还原或迁移,mysqldump 有用;但仅查当前引擎、字符集、索引定义,SHOW CREATE TABLE 更干净、更快、不依赖外部工具。
注意一个硬伤:如果表有全文索引(FULLTEXT)且使用了 ngram 或 mecab 插件,SHOW CREATE TABLE 不会显示插件名,只写 FULLTEXT KEY,得查 INFORMATION_SCHEMA.STATISTICS 补全细节。

















