AWS RDS MySQL报错1118:行大小过大,如何设置innodb_strict_mode?
解决MySQL错误1118:行大小超过8126的可行方案
针对你创建234列表时遇到的行大小超限问题,以下是无需大量重写代码的可行方案:
调整InnoDB行存储格式
将表的行格式设置为DYNAMIC或COMPRESSED,这两种格式会把超出行内存储限制的字段转移到溢出页,从而降低行内数据总大小。
创建表时指定格式:CREATE TABLE your_table_name ( -- 你的234列定义 ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;若表已存在,可修改格式:
ALTER TABLE your_table_name ROW_FORMAT=DYNAMIC;优化列的数据类型
检查所有列的数据类型,尽量缩小占用空间:- 把
TEXT类型替换为合适长度的VARCHAR(如果内容长度可控) - 用
SMALLINT/TINYINT替代INT(数值范围允许的情况下) - 用
DATE替代DATETIME(无需存储时间时)
每个列的空间占用减少后,总行大小会显著降低。
- 把
手动添加innodb_strict_mode参数
若使用云数据库(如AWS RDS、阿里云RDS),参数组中默认可能不显示该参数,你可以手动添加:- 进入数据库参数组管理页面
- 点击"添加参数",输入
innodb_strict_mode,设置值为0 - 保存参数组并重启数据库实例
若是自建MySQL,直接在my.cnf(Linux)或my.ini(Windows)中添加:
innodb_strict_mode = 0保存后重启MySQL服务即可生效。
拆分非核心列到关联表
把部分访问频率低、占用空间大的列拆分到单独的子表,通过外键与主表关联。比如将所有备注类、文本类的大字段移到子表,查询时按需关联,这种改动对现有代码的影响远小于全量重写。
内容的提问来源于stack exchange,提问作者neubert
相关产品推荐
相关产品推荐

