You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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),参数组中默认可能不显示该参数,你可以手动添加:

    1. 进入数据库参数组管理页面
    2. 点击"添加参数",输入innodb_strict_mode,设置值为0
    3. 保存参数组并重启数据库实例
      若是自建MySQL,直接在my.cnf(Linux)或my.ini(Windows)中添加:
    innodb_strict_mode = 0
    

    保存后重启MySQL服务即可生效。

  • 拆分非核心列到关联表
    把部分访问频率低、占用空间大的列拆分到单独的子表,通过外键与主表关联。比如将所有备注类、文本类的大字段移到子表,查询时按需关联,这种改动对现有代码的影响远小于全量重写。

内容的提问来源于stack exchange,提问作者neubert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 04:45:44