mysql的rows大小超过8126_Row size too large (> 8126). Changing some columns to TEXT or BLOB

当插入的一行数据大于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

986a821aae5bf4d7fa06482bc7d8e453.png

最后一个最极端的方法。。。

如果你能确定你的业务 不使用事务的话。。。

可以将innodb引擎 修改为myisam引擎

这样就不会有 单行最大8k的问题了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值