ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ...

在创建数据库表时报错

之前已经在数据库里创建了多张表,但在创建其中一张数据库表时报如下错:

ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
Query OK, 0 rows affected (0.00 sec)

原因分析

这篇文章说得比较清楚: 链接

简单来说,就是在InnoDB引擎下创建表时行格式无法存储它,可能有以下原因:

  1. strict mode 模式启用后,DDL 语句被执行时影响了表,如 CREATE TABLE or ALTER TABLE 操作,这时会抛出Error信息。
  2. strict mode 模式被禁用后,DDL 语句被执行时影响了表,如 CREATE TABLE or ALTER TABLE 操作,这时会抛出Warning信息。
  3. 不管strict mode 模式是否启用,DML语句被被执行写入一行时,InnoDB引擎行无法存储它时,会抛出这个Error信息。

我发现是第三种情况,因为网上很多人说是要设置下 strict mode 模式进行解决,我发现解决不了。

根本原因

在InnoDB引擎下,存在最大的row size的限制,它的限制大约是 innodb_page_size 这个系统变量的一半。详情

但不同的row format其具体值也会不一样,其中 DYNAMICCOMPRESSED row size是最大的。在做row format时,有以下几种模式:

  • REDUNDANT (MySQL 4.1 之前默认采用的方式)
  • COMPACT (MariaDB [10.1~10.2.1] 和 MySQL 5.6 之前默认采用的方式)
  • DYNAMIC (MariaDB >= 10.2.2 默认采用的方式)
  • COMPRESSED

四种不同的格式详情可参考:
https://mariadb.com/kb/en/innodb-row-formats-overview

解决方法

将表的row format改成 DYNAMIC 或者 COMPRESSED 可解决
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值