更新text字段时出现Row size too large报错应付措施_Mysql

起因
团购开发报告说更新时出错。

更新SQL如下

复制代码 代码如下:

UPDATE table_name d SET d.column_name='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
WHERE d.ID=100976;

报错信息如下
Error Code : 1118
Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
疑惑
更新字段只涉及 column_name字段,且该字段是TEXT类型。

个人之前理解是
TEXT的内容在 Dynamic的table format下是存在off-page中的,不会占用row size的计算。
Barracuda 对应row_format ( dynamic, compress) ,其中dynamic下text的所有内容都是off-page存放的 (点击查看)
Antelope 对应row_format (compact, redundant),其中compact下的text是存786B在row中,超过部分存在off-page
而服务器配置是 innodb_file_format = Barracuda
照理说所有table用的都是 dynamic 结构。
但是! 原因如下,摘自文档:
To preserve compatibility with those prior versions, tables created with the InnoDB Plugin use the prefix format, unless one of ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED is specified (or implied) on the CREATE TABLE command.
也就是说,建表时不显示指定 row_format = dynamic ,即使 innodb_file_format = Barracuda 表的row-format还是 compact

所以总结为一句话就是:如果某个表的text字段很多建议建表时加上 row_format = dynamic
当然,回过头来MySQL的报错也是有误导性的,bug库中也对confirm了这个bug(点击查看),并在5.1.61中优化了报错提示。

时间: 2024-10-16 04:09:56

更新text字段时出现Row size too large报错应付措施_Mysql的相关文章

DTS迁移多text字段时出现Row size too large的错误

    本周DTS一个增量迁移任务出现一个很诡异的问题,之所以说诡异是因为DTS已经为该用户的库同步了很长一段时间的增量数据(数据量在15G+),今天突然出现了这个问题:     从异常的信息大致可以推测出出错的原因是新插入的一行数据需要存储在数据页的实际数据长度大于一个数据页的长度(8126).所以首先对比了一下源表和目标表的数据结构(可能是两边的表结构不一致导致的),两边的表结构是一致的,但却是定义了许多Text类型的大字段而已     然后查询了两边的innodb_file个配置,源库:

Mysql 报Row size too large 65535 的原因及解决方法_Mysql

报错信息:Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535 向mysql的表插件一个字段 类型为text时,或修改一个字段类型为text时,报出上面的错误.其实我对这个错误的原因理解也不是很深,给出一些我查到的解释吧 大意是数据表中有一个设定长度为64K的字段索引,当表中字段(不知道是字段名字还是什么)不能超过这个长度,65,535所说明的是针对的是整个表的

itext htmlparser-各位朋友,现在用itext将html转为pdf时,用到HtmlParser.parse报错,是缺jar包吗

问题描述 各位朋友,现在用itext将html转为pdf时,用到HtmlParser.parse报错,是缺jar包吗 package topdf; import java.io.FileOutputStream; import com.itextpdf.text.Document; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.PdfWriter; public class HtmlToPdf { public s

plsql-PLSQL中定义显式游标时用了INTO子句没有报错,请教这个INTO子句的作用是什么?

问题描述 PLSQL中定义显式游标时用了INTO子句没有报错,请教这个INTO子句的作用是什么? 如题,在定义显式游标时用了INTO子句,能编译正常且执行也没错,请问这里的into有啥作用? 代码如下: DECLARE pi_org_cd VARCHAR2(15); -- org cd CURSOR cur_test_data IS SELECT 'MYTEST' org_cd INTO pi_org_cd FROM DUAL ; BEGIN OPEN cur_test_data; FETCH

用ssh全注解时,在@Action中@Result注解报错

问题描述 用ssh全注解时,在@Action中@Result注解报错 import javax.annotation.Resource; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; imp

急急急~~~请高手帮忙解决struts导入excel时,文件超过70kb就报错

问题描述 struts1.2+tomcat5.0excel导入sql2000数据库在本地项目上导入几M的excel都不会报错,但是放在服务器上超过70k的就报错报错信息是Processingofmultipart/form-datarequestfailed.SocketreadfaileAction里面的代码如下/******************上传文件*****************************/Stringencoding=request.getCharacterEnco

深夜疑惑:SH整合时,getSession()正确,getHibernateTemplate()报错

问题描述 [size=medium]1.applicationContext-common.xml:<!-- sessionFactory --><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="configLocation"><value

mysql表多个text的字段,出现以下错误,#1118 - Row size too large (&amp;amp;gt; 8126). Changing some column

问题描述 首先感谢解答.本人有一个表,里面有10多个text的字段,会填很多数据.但是在保存时候出现以下错误,#1118-Rowsizetoolarge(>8126).ChangingsomecolumnstoTEXTorBLOBorusingROW_FORMAT=DYNAMICorROW_FORMAT=COMPRESSEDmayhelp.Incurrentrowformat,BLOBprefixof768bytesisstoredinline.请问怎么解决?万分感谢! 解决方案 解决方案二:参

做文件上传时一按替提交就报错

问题描述 010-11-99:43:07org.apache.catalina.core.ApplicationContextlog信息:MarkingservletSendFileTransferasunavailable2010-11-99:43:07org.apache.catalina.core.ApplicationContextlog严重:ErrorloadingWebappClassLoaderdelegate:falserepositories:/WEB-INF/classes/