本文目录

一、背景描述

二、报错内容

三、解决方案

四、拓展


一、背景描述

MySQL版本:5.6.28, MySQL引擎 InnoDB。本地环境、开发环境、生产环境数据库版本一模一样。
昨天晚上更新一个项目至生产环境,在本地和开发环境测试的都很正常,但是到生产环境之后,其中一张表中的数据更新有异常。而这张表,不管是MySQL引擎、还是字符集、还是表结构,三个环境一模一样。这就是奇怪的地方。

二、报错内容

关键报错内容为:

Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Row size too large (> 1982). 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.

完整的报错信息如下:

2021-07-06 21:32:20.331 ERROR [http-nio-6184-exec-6][HvacModelEmbodimentServiceImpl.java:95] - E|HvacModelEmbodimentServiceImpl|updateEmbodimentById()|更新实施方案失败,【原因 =
### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Row size too large (> 1982). 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.
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: UPDATE hvac_model_embodiment  SET model_id = ?,  principle_introduce = ?,   line_reserved = ?,  realize_function = ?,    embodiment_attachment = ?,    update_user = ?,   update_time = ?,   principle_introduce_image = ?,    realize_function_image = ?, line_reserved_image = ?  WHERE id = ?
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Row size too large (> 1982). 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.
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Row size too large (> 1982). 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.】

具体字段类型和长度如下图所示:

三、解决方案

按照报错信息提供的修改建议(Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help)

初步判断为部分字段类型和长度不满足需求,经过测试,只有principle_introduce、line_reserved、realize_function和embodiment_attachment四个字段有问题,然后修改了principle_introduce、line_reserved、realize_function和embodiment_attachment这四个字段,类型修改为text之后,这前三个字段可以正常保存成功,但是 embodiment_attachment 这个字段仍然保存失败,报错信息同上,一模一样。

于是又接着按照报错信息提供的修改建议(using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help),把行格式由Compact改为 DYNAMIC 之后 再次测试,保存成功。很完美的把问题解决了。具体修改内容如下图:

但是具体原因还没有查到。以后再深入研究。

四、拓展

根据报错信息,在网上搜索为什么会出现这样的情况,根据网上提供的一些资料,这个问题可能与不同引擎之间使用的存储格式有关。很多都说把InnoDB引擎改为MyISAM引擎即可。
而MyISAM有3种行存储格式:fixed/dynamic/compressed。InnoDb在MyIASM基础上新引入了Barracuda。至于不同引擎的默认设置,以及各种存储格式之间的区别,我也没有深入研究,以后有时间再去深入了解一下。

完结!

【MySQL异常】Row size too large (> 1982). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNA相关推荐

  1. Mysql数据库报错:Row size too large ( 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DY

    1.问题描述: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DY ...

  2. 亲身实践已解决:Mysql Row size too large ( 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT

    今天在把一个数据库的数据导出sql在另外一个库中执行的时候出现了这个问题, 查看当前的表类型为innodb 找到mysql的安装目录,找到配置文件my.ini 进行如下修改: innodb_file_ ...

  3. Row size too large ( 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC

    将InnoDB 改为MYISAM再重新执行就可以

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

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

  5. mysql的rows大小超过8126_Row size too large ( 8126). Changing some columns to TEXT or BLOB

    当插入的一行数据大于8k 时...mysql会提示错误 如下 Row size too large (> 8126). Changing some columns to TEXT or BLOB ...

  6. Mysql数据库报错:Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DY

    1.问题描述: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DY ...

  7. 解决办法之Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC

    报错:Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC ...

  8. Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC

    今天在对MySQL数据库进行数据处理时,遇到一个错误: Row size too large (> 8126). Changing some columns to TEXT or BLOB or ...

  9. 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMI

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

最新文章

  1. 《Windows Server 2012 Hyper-V虚拟化管理实践》——1.3 物理服务器选型建议
  2. C# TCP sever client
  3. 语义分析的一些方法(上篇)
  4. 如何在C/S下打印报表
  5. Netty入门(二)时间服务器及客户端
  6. Java读取Propertity文件
  7. 构建jQuery对象(转)
  8. UVALive5910 UVA1641 POJ4022 ASCII Area【水题+输入输出】
  9. 反射异常 java.lang.InstantiationException处理
  10. java窗口全屏_java如何改全屏为窗口?求啊啊啊啊
  11. 深信服(SCSA)认证学习—基础知识点二
  12. 步进电机怎么选型?步进电机驱动器选型要怎么选?
  13. 教你认识各种分辨率的英文缩写
  14. ISP简介(stm32)
  15. 任正非:华为要的是全世界
  16. 汉语自动分词研究评述
  17. vue中引入swiper(4.0+),打包出错( ERROR in static/js/4.bafdba9a08bd02fd1c37.js from UglifyJs Unexpected toke)
  18. notepad++的下载安装
  19. aix ds多路径_AIX连接IBM存储 多路径软件常用命令
  20. UNIX常用命令整理

热门文章

  1. 软考高项计算题公式:PV, EV, AC, CV, SV, CPI, SPI, ETC, EAC,BAC
  2. Python 列表,for循环,元组的使用(修改、添加、删除、排序、切片)
  3. SY-REPID 和 SY-CPROG使用详解及其区别
  4. 关于Android app正式版本和测试版本的切换
  5. DL之RNN:人工智能为你写周董歌词——基于TF利用RNN算法实现【机器为你作词】、训练测试过程全记录
  6. php在线查毒,linux clamav 免费查毒工具
  7. Android自动化测试框架uiautomator2详解
  8. 在您所指定的角色服务器,指定 RD 会话主机服务器的远程桌面授权模式
  9. python怎么算阶乘_python计算阶乘
  10. mysql高级学习笔记