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

场景:

复制代码
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';

待完善......

相关推荐
张张123y24 分钟前
# 后端第七课:FastAPI 实战入门(用刚学的 Python 写第一个 API 接口)
开发语言·python·mysql·api·fastapi
l1t26 分钟前
DeepSeek总结的在 NVIDIA Vera 上对 DuckDB v2.0-dev 进行基准测试
服务器·数据库·sql
渣渣盟35 分钟前
2000万QPS背后的存储引擎博弈:InnoDB、MyRocks、WiredTiger到底谁更强?
数据库·mysql
张张123y1 小时前
# 后端第八课:数据库入门(给 FastAPI 接口加上“记忆“,存下问答历史)
数据库·sql·mysql·oracle·fastapi·sqllite
paopaokaka_luck2 小时前
校园新闻推荐系统(DeepSeek新闻助手、个性化推荐算法、 Redis热词排行榜、ECharts运营分析、互动与实时通知、新闻运营闭环)
java·spring boot·mysql·spring·tomcat·echarts·intellij idea
RestCloud2 小时前
数据同步零中断:ETL服务宕机重启后异常任务自动重跑
数据仓库·mysql·etl·etlcloud·数据传输·etl工具
猫咪很可爱3 小时前
MySQL 定时 DDL 导致 mysqldump 备份失败:场景模拟、排查与优化建议
mysql
数据库小学妹4 小时前
MySQL内存占用过高怎么排查?分层定位与OOM根因
数据库·经验分享·mysql·内存·oom
刘胡子大叔4 小时前
旧 SQL 在新 PG 上能不能跑
数据库·sql
毕设单片机4 小时前
springboot志愿服务平台的设计与实现 36731
java·spring boot·mysql·志愿服务平台