关于Mysql 中 Row size too large (> 8126) 错误的解决和理解

提示:啰嗦一嘴 ,数据库的任何操作和验证前,一定要记得先备份!!!不会有错;

文章目录

  • 问题发现
  • 一、问题导致的可能原因
    • 1、页大小
    • 2、行格式
      • 2.1 compact格式
      • 2.2 Redundant格式
      • 2.3 Dynamic格式
      • 2.4 Compressed格式
    • 3、BLOB和TEXT列
  • 二、解决办法
    • 1、修改页大小(不推荐)
    • 2、修改行格式
    • 3、修改数据类型为BLOB和TEXT列
    • 4、其他优化方式(可以参考使用)
      • 4.1 合理设置数据类型大小
      • 4.2 合理进行表结构设计
      • 4.3 更换存储引擎


问题发现

今天在导入他人项目中的sql数据库文件时,出现一个mysql的错误提示,大致描述是:
Row size too large (> 8126),英文不算好的我看字面意思,估摸着大概就是说我们插入的行数据可能太大了,超过了设定的阙值;

一、问题导致的可能原因

这个限制主要是因为MySQL内部存储机制的约束,MySQL的InnoDB存储引擎有一个最大行大小限制关于mysql引擎内容比较多,以后再专门写一篇内容好好说说;这里我们只需要知道他是目前mysql 默认的存储引擎就好啦;

而这个最大行大小限制主要由于几个因素影响:

1、页大小

页是InnoDB管理数据的最小单位,InnoDB使用16KB的页来存储数据,行数据在进行保存插入的时候,要求我们的单行数据不能跨越多于半个页(8KB)。否则数据库会自动按照是否进行溢出页的机制来处理数据;
简单说的话,其实就是数据库中的每行数据我们可以看作是一所个人专属的小房子,里面预留了一个固定的空间给他们放东西,如果放入的东西太多了,超过这个空间大小,屋主就会考虑是否可以把东西放在屋外,来保障空间不至于太过拥挤,这里的房间内的空间就是页内空间大小,房外就是多出的

2、行格式

InnoDB支持几种行格式,如compact、redundant、dynamic和compressed。其中,dynamic和compressed格式是为了解决行大小限制而引入的,允许行中的某些列(如BLOB和TEXT类型)存储在页外。
这点简单的来说,四种行格式可以看作是房屋管理办法四个准则,每个准则都有各自适用的场景和优点

关于行格式,我们这里只需要知道有哪几种,以及他们数据存储方式,各自应用场景即可;

2.1 compact格式

InnoDB的默认行格式,也是最常用常见的格式;采取的是位图压缩的存储方式;适用于大多数OLTP(在线事务处理应用场景。OLTP其实就是指那种较高并发,并且要求低延迟,专注业务操作的应用,类似银行交易、订单处理、库存更新那些情况比较常用;

2.2 Redundant格式

MySQL 5.0以前的默认行格式;适用具有大量NULL值的表;

2.3 Dynamic格式

从 MySQL 5.6.3 开始,默认的行格式是 DYNAMIC,Dynamic行格式具有高度的灵活性,可以动态地调整行的大小和存储方式。基于实际数据长度大小来进行调整存储空间,以节省存储空间;适用于包含大量长度可变列的表,例如包含TEXT、BLOB等大型字段的表。

2.4 Compressed格式

Compressed行格式采用压缩存储方式,它适用于存储大量重复数据或较大的表。Compressed行格式使用多种压缩算法,如Zlib和LZO等,能够显著减少磁盘I/O操作,提高存储和读取性能

3、BLOB和TEXT列

这点因素与上面那点有关,Blob 和 Text 是mysql中的大数据存储类型,但是在我们不设置行模式为ynamic和compressed的时候,这些列通常存储在页外,但它们的元数据(如长度)仍然存储在行内,而这个存储的大小行格式的设置会有所不同。也就是说明他会计入行大小限制的计算

二、解决办法

好了,既然知道问题原因的可能了,现在就是开始如何解决了;

1、修改页大小(不推荐)

虽然mysql InnoDB的引擎默认的页大小是16KB,但是这个值并不是不能修改,修改配置文件;
添加或修改innodb_page_size参数来设置新的页大小。例如,innodb_page_size = 16384(以字节为单位,对应16KB),或者设置的更大;
不过需要注意的是:页大小的调整最好是在数据库初始化的初期去设置,一旦数据库初始化完成后,就不建议更改了,这种情况下意味着你原来已经存在的所有ibdata和ib_logfile文件都需要重建,那就不是很合适了,而且这样做也可能会带来一定的性能影响;

2、修改行格式

既然dynamic和compressed行格式就是为了解决行大小限制而引入的,我们可以修改该格式即可;当然了,我们也不是都要去修改这个,这个也是和我们的mysql版本有关的;

从 MySQL 5.6.3 开始,默认的行格式是 DYNAMIC,也就是说,其实在这个版本之后的我们其实就不需要修改行格式了;
不过如果你和博主一样是通过导入sql文件的方式创建的表的话,需要确认你的sql文件中是否有另外定义行格式;例如:
在这里插入图片描述
博主虽然数据库是8.0+,默认行模式已经是DYNAMIC,但是对方给的sql文件创建表的语句中指定了Compact行格式,这个原因大概率是因为它在导出时候环境是基于mysql5.x,而博主是8.0+的,所以这里导出的时候会有所出入;这里我讲所有的行模式设置都去掉了,默认就会按照DYNAMIC设置,就不会报错了;因此我们在做不同版本mysql的数据导入与导出时,需要特别小心版本不同带来的影响

3、修改数据类型为BLOB和TEXT列

如果你本来该字段就会需要存储较大的数据,就应该用blob和text来替换原来的数据类型VARCHAR或CHAR,这样能让数据大部分存储在溢出页中,而不去纳入大小限制的值计算;而如果我们之前设置了行模式的话,这个纳入计算的值占用会更小;

4、其他优化方式(可以参考使用)

4.1 合理设置数据类型大小

在进行表设计时候,一些列字段我们根据实际需要设计,例如varchar数据类型,如果实际存储值不大,长度就定义足够空间大小即可(即能用varchar64就不用varchar128,能用128就不要用256,尽可能合理分配空间);

4.2 合理进行表结构设计

如果设计表的时候,单表列尽量不要太多,适当的进行拆表将列分出去,也能在一定横渡上避免问题;

4.3 更换存储引擎

换另一种存储引擎,这个方法的话见仁见智,要根据自己的业务场景来抉择了,比如MyISAM引擎最大的缺点就是它不支持事务和高并发,所以才使得大多数情况下我们仍然在用InnoDB引擎的原因,虽然它读写性能上并没有前者优秀;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/852699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vmmare虚拟机没有被分配ip地址问题;NAT模式下一直变化问题

打开任务管理器–>服务–>找到与VM和server相关的服务 发现NAT和DHCP服务被关闭了 尝试启动,报错 尝试一 虚拟网络编辑器点击还原默认设置 尝试二 可以了 ip变化 更改租用时长

性能测试常见的内存溢出问题: JVM 内存溢出如何调优?

针对java项目做性能测试的时候,很多同学都见过一个报错,就是OOM【Out Of MemoryError】;那出现这种报错就是项目发生了内存溢出的问题,这是比较严重的性能问题。所以,作为一个性能测试工程师,我们要能够分析JVM内存的问题以及理解其中的原理,才能更好的给JVM内存出现的性…

Wireless Network(百练,POJ)

题目链接: http://bailian.openjudge.cn/tm2019/F/ 2236 -- Wireless Network 题面描述: 思路: 这题开了10s,所以可以暴力点,每次修复一个点,就将该点相连的那些边建出来,总的时间复杂度为: O(nm)。关键在于如何判定两个点是否…

新能源汽车不安全?新能源汽车测试之方案篇——充电桩综合测试

背景 随着全球对气候变化和环境污染问题的日益加剧,新能源汽车作为一种环保、节能的交通工具备受关注。其发展背景主要源于对环境问题的关注以及对传统燃油汽车依赖的减少。新能源汽车的出现,带来了减少尾气排放、节能减排、保护环境等多方面的优点&…

【STM32】uc/OS-III多任务程序

目录 一、背景介绍二、UCOS-III简单介绍(一)源码(二)功能 三、实验(一)基于STM32CubeMX建立工程1、创建项目2、配置项目 (二)实现 四、总结五、参考 一、背景介绍 学习嵌入式实时操…

《精通ChatGPT:从入门到大师的Prompt指南》第7章:创意写作

第7章:创意写作 7.1 角色设定 角色设定是创意写作中最关键的环节之一。成功的角色设定能够让读者对故事产生共鸣,使故事更加生动有趣。角色不仅仅是情节发展的载体,更是读者情感的投射对象。因此,深入了解如何设定一个生动而有深…

【React】json-server

1.安装到开发环境 npm install json-server -D2.在根目录下下,新建db.json文件 {"list": [{"rpid": 3,"user": {"uid": "13258165","avatar": "http://toutiao.itheima.net/resources/images/9…

Go Module详解

文章目录 基本介绍相关环境变量Go Module的使用初始化项目(go mod init)管理依赖项(go mod edit)获取依赖项(go mod download)整理依赖项(go mod tidy)导入vendor目录(go…

【DevOps】Ubuntu基本使用教程

目录 引言 Ubuntu简介 安装Ubuntu 准备工作 创建启动盘 安装过程 桌面环境 基本操作 定制桌面 文件管理 文件操作 文件权限 软件管理 安装软件 更新软件 系统设置 用户账户 网络设置 电源管理 命令行操作 常用命令 管理权限 安全与维护 系统更新 备份…

傲星一个在线工具箱源码附搭建教程

傲星工具箱源码是一款功能强大的在线工具箱程序,您可以通过安装扩展来增强其功能。同时,该程序还提供了插件模板的功能,让您可以将其作为网页导航使用。 1.PHP版本需不低于7.2.5。 2.Mysql版本需不低于5.7。 3.需要安装fileinfo扩展。 4.…

蓝牙音频解码芯片TD5163介绍,支持红外遥控—拓达半导体

蓝牙芯片TD5163A是一颗支持红外遥控、FM功能和IIS音频输出的蓝牙音频解码芯片,此颗芯片的亮点在于同时支持真立体声&单声道、TWS功能、PWM、音乐频谱和串口AT指令控制等功能,芯片在支持蓝牙无损音乐播放的同时,还支持简单明了的串口发送A…

idea有这个类却报红,无法用快捷键找到

idea有这个类却报红,无法用快捷键找到,但是项目启动却没有任何问题,严重影响到了开发效率,关idea 重新打开没有用。 找了一圈,办法如下: 1、点击左上角的 File—>Invalidate Caches/Restar 2、点击 In…

企业如何禁止员工电脑插u盘?禁用U盘的七个方法

禁止电脑插入U盘其实很简单,有多种方法,有适合个人的有适合企业的,今天一次性给你介绍清楚。 1.禁用USB端口: 通过组策略:在Windows域环境中,管理员可以使用组策略来禁用所有或部分USB端口。这可以通过编…

云手机的 Socks5 网络配置指南

当你在使用云手机之前,了解和正确配置 Socks5 网络代理是提升其性能和功能的关键一步; 直白点来说利用 Socks5 代理进行网络配置,可以带来诸多优势。 什么是socks5? Socks5 是一种重要的网络代理协议,主要功能在于它…

计算机哈佛架构、冯·诺依曼架构对比

哈佛架构和冯诺依曼架构是两种不同的计算机系统架构,它们在存储器组织方式上有着显著的区别。下面是它们的原理、优缺点的对比以及一些常见的 MCU 采用的架构: 哈佛架构: 原理:哈佛架构将指令存储器(程序存储器&#x…

【后端】Java学习笔记(二周目-1)

环境 安装JDK8并配置环境变量 jvm核心类库jre jre开发工具jdk Java基础运行流程,代码从上到下,从左往右,只运行一次 桌面—>新建文件夹—>新建记事本—>打开编写代码 public class Hello{public static void main(String[] arg…

如何一键拷贝PPT中的所有文字?

有时我们可能需要引用PPT的文字,但一个幻灯片一个幻灯片拷贝很是麻烦,我们想一键拷贝PPT中所有幻灯片中的内容(最近我就遇到了这个需求)。今天就来讲讲这个一键拷贝的技巧。因为大家可能会遇到同样的问题,所以在此记录…

一文彻底理解机器学习 ROC-AUC 指标

在机器学习和数据科学的江湖中,评估模型的好坏是非常关键的一环。而 ROC(Receiver Operating Characteristic)曲线和 AUC(Area Under Curve)正是评估分类模型性能的重要工具。 这个知识点在面试中也很频繁的出现。尽管…

【机器学习】与【数据挖掘】技术下【C++】驱动的【嵌入式】智能系统优化

目录 一、嵌入式系统简介 二、C在嵌入式系统中的优势 三、机器学习在嵌入式系统中的挑战 四、C实现机器学习模型的基本步骤 五、实例分析:使用C在嵌入式系统中实现手写数字识别 1. 数据准备 2. 模型训练与压缩 3. 模型部署 六、优化与分析 1. 模型优化 模…

零基础入门学用Arduino 第二部分(二)

重要的内容写在前面: 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后,整体感觉是很好的,如果有条件的可以先学习一些相关课程,学起来会更加轻松,相关课程有数字电路…