Checksum 仅对 MyISAM 表生效,是物理校验标记而非自动校验功能;勾选后需手动执行 CHECK TABLE 才触发校验,InnoDB 表忽略该设置且无实际作用。
checksum 是 mysql myisam 表的一个物理校验机制(innodb 不支持),用于检测表文件是否损坏。navicat 的「表选项」里确实有勾选 checksum 的入口,但这个操作仅对 myisam 表生效,且在现代 mysql(5.7+ 默认引擎为 innodb)中基本无实际用途。
Navicat 里勾选 Checksum 实际做了什么
- 仅当表引擎是
MyISAM时,勾选后会执行ALTER TABLE tbl_name CHECKSUM = 1 - 对
InnoDB表勾选该选项:界面允许操作,但 MySQL 忽略、不报错、也不生效(查SHOW CREATE TABLE可确认无CHECKSUM=1) - 勾选后不会自动触发校验计算,只是设置一个标记;真正校验需手动执行
CHECK TABLE tbl_name
为什么你勾了没反应?常见原因
-
SELECT @@default_storage_engine返回InnoDB→ 当前表极大概率是 InnoDB,Checksum选项形同虚设 - 表虽为 MyISAM,但 MySQL 启动时未启用
--myisam-recover-options或skip_checksum被设为 ON,导致校验被禁用 - Navicat 连接的用户权限不足(需
PROCESS权限才能执行CHECK TABLE)
真正需要数据完整性校验,该怎么做
- InnoDB 场景下,
Checksum不适用,应依赖:-
innodb_checksum_algorithm(默认strict_crc32,写入时自动校验页) - 定期运行
mysqlcheck --check --all-databases(服务端命令,非 Navicat 功能) - 监控
SHOW ENGINE INNODB STATUS中的DETECTED CORRUPTION字段
-
- 若坚持用 MyISAM +
Checksum:先确认表引擎:SHOW CREATE TABLE your_table→ 找到ENGINE=MyISAM,再在 Navicat「设计表 → 选项」中勾选,保存后执行CHECK TABLE your_table验证
真正容易被忽略的是:Navicat 的 Checksum 勾选项,不是“开启校验功能”,而只是一个针对 MyISAM 的元数据标记——它既不加密、也不防篡改、更不替代备份。生产环境若真担心数据损坏,优先检查磁盘健康、RAID 状态和 innodb_force_recovery 日志。


















