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

Posted 放羊的牧码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

分析原因

  1. 因为 mysql 默认的 page 最大是 16k,而 page 中单行最大不能超过 8k
  2. 因为 text 或者 blob 字段太多也会导致一行数据大于 8k,因为 innodb 默认的 approach(羚羊)存储格式会把每个 blob 字段的前 864 个字节存储在 page 里。这样的话一旦有很多个text 或者 blob字段,还是有可能超过 8k

解决方案

1、可以尝试将 varchar 字段改成 text  或者 blob

2、表结构需要重新设计,减少字段个数

3、修改配置方案1

SET INNODB_STRICT_MODE = 0;

4、修改配置方案2

SET GLOBAL innodb_file_format='Barracuda'

SHOW GLOBAL VARIABLES LIKE '%file_format%';

ALTER TABLE 表名 ROW_FORMAT=COMPRESSED

SHOW TABLE STATUS LIKE '表名'

以上是关于MySQL - Row size too large (> 8126). Changing some columns to TEXT or BLOB的主要内容,如果未能解决你的问题,请参考以下文章

MySQL ERROR1118报错详解 Row size too large

mysql创建表时,报错:Row size too large.

mysql创建表报错:ERROR 1118 (42000) ...Row size too large (> 8126)

mysql创建表报错:ERROR 1118 (42000) ...Row size too large (> 8126)

MySQL插入单行数据较大时报Row size too large错误 解决方案

MySQL插入单行数据较大时报Row size too large错误 解决方案