msyql中SQL 错误 [1118] [42000]: Row size too large (> 8126)

文章讲述了MySQL中遇到的错误1118,源于行大小超过限制。解决方法包括优化表结构、使用TEXT或BLOB类型存储大列、分割表和启用InnoDB行压缩。还提到检查innodb_strict_mode设置以及如何在配置文件中调整。
摘要由CSDN通过智能技术生成

场景:

CREATE TABLE `test-qd`.eqtree (
	`INSERT INTO test.eqtree (idocid` VARCHAR(50) NULL,
	sfcode VARCHAR(50) NULL,
	sfname VARCHAR(50) NULL,
	sfengname VARCHAR(50) NULL,
	……
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_general_ci;

alter  table eqtree modify  column DMODT  varchar(20) ;

SQL 错误 [1118] [42000]: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.

在这里插入图片描述

临时解决办法:

执行以下SQL语句,查看严格模式是否开启
show variables like ‘%innodb_strict_mode%’;

执行后如果为​​ON​​,则需要关闭
set global innodb_strict_mode=0;

此方式下基于会话级别

完成后恢复
set global innodb_strict_mode=1;

或更新my.ini​​,在[mysqld]配置项下面新增一行

[mysqld]
innodb_strict_mode=0

根本原因分析:

这个错误通常是由于MySQL表中的行过大而引起的。MySQL有一些限制,其中一个是行的最大大小不能超过特定的限制,通常为65,535个字节。在你的情况下,行的大小超过了这个限制,导致了错误1118的出现。

要解决这个问题,你可以考虑以下几种方法:
优化表结构:检查表的设计,尝试减少每行所占用的空间。这可能包括删除不必要的列,使用更紧凑的数据类型,或将较大的列(如TEXT或BLOB)移出主表并将其替换为引用表。
使用TEXT或BLOB类型:根据错误消息的建议,将较大的列(如文本或二进制数据)改为TEXT或BLOB类型。这将使得存储在这些列中的数据不会直接存储在行中,而是存储在单独的页中。
分割表:如果可能的话,将表拆分成多个相关联的表,以减少每个表行的大小。
使用InnoDB的压缩功能:InnoDB引擎提供了行压缩功能,可以减少行的存储空间。你可以考虑启用InnoDB的压缩功能来减少表的存储空间。

借助对表分析:

SHOW TABLE STATUS LIKE ‘eqtree’;

待完善……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值