ITPub博客

首页 > 数据库 > MySQL > Row size too large (> 8126). Changing some columns to TEXT or BLOB

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

原创 MySQL 作者:yleizzz 时间:2019-09-18 15:56:38 0 删除 编辑



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




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30127122/viewspace-2657427/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 个人的货物清单
请登录后发表评论 登录
全部评论

注册时间:2015-02-03

  • 博文量
    81
  • 访问量
    90777