phpMyAdmin 表结构编辑界面无“Compressed”字段属性,压缩由 InnoDB 表级选项控制:必须设 ROW_FORMAT=COMPRESSED 与 KEY_BLOCK_SIZE(如 8),且仅对独立表空间中 BLOB/TEXT 等大字段的存储页生效。
phpMyAdmin 里根本没有“Compressed”字段属性
直接说结论:phpmyadmin 的表结构编辑界面(“结构”页)中,compressed 不是可选的字段属性,也不会出现在下拉菜单或勾选项里。它不是 mysql 原生支持的列级压缩类型,也不是 phpmyadmin 提供的配置项。你看到的 compressed 列名,大概率来自 information_schema.columns 查询结果中的 extra 字段值,但那只是对 compressed 行格式下某些 blob/text 列的内部标记,不能手动设置。
真正能控制压缩的是 InnoDB 表级 ROW_FORMAT 和 KEY_BLOCK_SIZE
MySQL 的数据压缩由存储引擎决定,InnoDB 支持页级压缩,但必须通过表选项启用,而非字段属性:
-
ROW_FORMAT=COMPRESSED是必需的(仅对 InnoDB 有效) -
KEY_BLOCK_SIZE指定压缩页大小(如1,2,4,8,16,单位 KB),必须与innodb_page_size兼容 - 压缩只对 BLOB、TEXT、VARCHAR 等大字段的实际存储页生效,普通 INT/VARCHAR(255) 不会因设了
ROW_FORMAT就自动“变小” - phpMyAdmin 中可在“操作”页 → “表选项” → 手动输入
ROW_FORMAT=COMPRESSED和KEY_BLOCK_SIZE=8,然后执行
执行压缩前必须确认的三件事
跳过这些检查,ALTER TABLE 很可能失败或无效:
- 引擎必须是
InnoDB(MyISAM不支持COMPRESSED) - MySQL 版本 ≥ 5.7(5.6 仅支持
KEY_BLOCK_SIZE+ROW_FORMAT=COMPRESSED,但要求innodb_file_per_table=ON且innodb_file_format=Barracuda) - 表里不能有 FULLTEXT 索引(压缩表不支持)
- 执行时用
ALTER TABLE `table_name` ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;,不是在字段定义里加任何关键字
为什么你查 SHOW COLUMNS 或 DESCRIBE 看不到 Compressed?
因为压缩不是字段元数据的一部分。即使表启用了 ROW_FORMAT=COMPRESSED,EXTRA 列仍显示为空,除非该字段是 TEXT 或 BLOB 且实际存储溢出到单独页——此时 EXTRA 可能显示 compressed(小写,非可配置项),但这属于 InnoDB 内部行为,无法干预,也不代表字段本身被“设为压缩”。



















