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