mysql修改表注释必须显式指定engine,comment长度限2048字节且不报错截断,information_schema.tables中comment存在缓存延迟。

ALTER TABLE … COMMENT 语法必须带 ENGINE
MySQL 不允许只改表注释而不显式指定存储引擎,哪怕你只是想保留原引擎。直接写 ALTER TABLE t1 COMMENT = '新注释' 会报错:ERROR 1064 (42000) —— 这是很多人卡住的第一步。
正确做法是补上当前引擎(通常是 InnoDB),即使没改它:
ALTER TABLE t1 COMMENT = '用户登录日志表' ENGINE = InnoDB;
- 查当前引擎用:
SHOW CREATE TABLE t1或SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_NAME = 't1' - 如果表是
MyISAM,就得写ENGINE = MyISAM,不能省略 - 5.7+ 版本对
ENGINE的强制要求更严格,8.0 依然如此
COMMENT 字符长度限制为 2048 字节
超过这个长度的注释会被 MySQL 截断,且不报错 —— 你执行成功了,但实际存进去的只有前 2048 字节,容易误以为写全了。
尤其当注释含中文(UTF8MB4 下一个汉字占 4 字节)时,实际能写约 512 个汉字左右:
- 检查截断:执行后立刻查
SELECT TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 't1' - 避免踩坑:提前用
LENGTH('你的注释')测字节数,别信字符数 - 注释里别塞 JSON 或大段说明,那是文档该干的事,不是数据字典字段
修改注释不会锁表,但需注意低版本兼容性
在 MySQL 5.6 及之后,ALTER TABLE ... COMMENT 是 instant DDL(只要不改列结构),基本不阻塞读写。但老版本如 5.5 或更低,会触发 full table rebuild,锁表时间长。
- 确认版本:
SELECT VERSION() - 生产环境改前先在同版本测试库跑一遍,观察
SHOW PROCESSLIST是否长时间卡在altering table - 阿里云 RDS、腾讯云 CDB 等托管服务通常已升级到 5.7+,但自建 5.1/5.5 仍不少见
information_schema.TABLES 的 COMMENT 字段不是实时刷新的
极少数情况下(比如刚执行完 ALTER,马上查 information_schema.TABLES),可能看到旧注释 —— 这不是 bug,是 metadata cache 刷新延迟,通常几秒内自动更新。
如果需要立即验证,有两个更可靠的方式:
- 用
SHOW CREATE TABLE t1,结果里的COMMENT是实时准确的 - 或连上另一个客户端重查
information_schema.TABLES,避免复用同一个连接的缓存 - 不要依赖程序第一次查询就断言修改失败,多等一两秒再查











