Row size too large (> 8126). Changing some columns to TEXT or BLOB

来源:这里教程网 时间:2026-03-01 12:37:28 作者:

当插入的一行数据大于8k 时。。。mysql会提示错误 如下Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help 这是因为 mysql 默认的page 最大是16k  而page中 单行最大不能超过8k 所以 此时 可以尝试 将 varchar字段改成 text  或者 blob 这样通过 溢出区存储的方式。。。在这个page上 只会存储一小部分数据。更多的数据溢出区存储  但是。。有时候 因为 text 或者blob 字段太多 也会导致 一行数据大于8k 因为  innodb默认的approach(羚羊)存储格式会把每个blob字段的前864个字节存储在page里。。。。这样的话。。一旦有很多个text 或者 blob字段 还是有可能超过8k 此时的处理方式:#独立表空间。。 innodb_file_per_table=1  #修改存储格式

解决方式是使用innodb的Barracuda(梭鱼) 存储格式
这种格式对blob字段的处理方式是在page里头只存储一个20byte大小的指针,其它全存在溢出区,所以你轻易超不了8k

设置mysql全局变量: innodb_file_format = Barracuda(梭鱼)

命令:set GLOBAL innodb_file_format = 'Barracuda';

设置对应表的属性:ROW_FORMAT=COMPRESSED

最后一个最极端的方法。。。 如果你能确定你的业务 不使用事务的话。。。 可以将innodb引擎 修改为myisam引擎 这样就不会有 单行最大8k的问题了

相关推荐