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

 更新时间:2013年03月06日 16:14:22   作者:  
个人建议:表的text字段很多建议建表时加上 row_format = dynamic当然,回过头来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中优化了报错提示。

相关文章

  • mysql 5.7.11 安装配置教程

    mysql 5.7.11 安装配置教程

    这篇文章主要为大家详细介绍了mysql 5.7.11 安装配置教程,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • navicat连接mysql出现2059错误的解决方法

    navicat连接mysql出现2059错误的解决方法

    这篇文章主要为大家详细介绍了navicat连接mysql出现2059错误的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Mysql的Binlog数据恢复:不小心删除数据库详解

    Mysql的Binlog数据恢复:不小心删除数据库详解

    这篇文章主要介绍了Mysql的Binlog数据恢复,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • MySQL中Select查询语句的高级用法分享

    MySQL中Select查询语句的高级用法分享

    MySQL是一个开源的关系型数据库管理系统,支持多种操作语言,其中最基础、最常用的命令之一就是SELECT语句,所以本文就来和大家聊聊Select查询语句的几个高级用法吧
    2023-05-05
  • Mysql服务器的启动与停止(一)

    Mysql服务器的启动与停止(一)

    Mysql服务器的启动与停止(一)...
    2006-11-11
  • mysql间隙锁的具体使用

    mysql间隙锁的具体使用

    MySQL中有多种锁类型,本文主要介绍了mysql间隙锁的具体使用,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • MySQL中的UTF-8与UTF8MB4:差异解析方式

    MySQL中的UTF-8与UTF8MB4:差异解析方式

    MySQL中UTF-8和UTF8MB4的区别在于编码范围、存储需求和兼容性,UTF-8可以表示大多数常见的字符,但对于一些罕见的字符和emoji表情等,可能无法正确表示,而UTF8MB4则可以表示几乎所有的Unicode字符,包括那些UTF-8无法表示的字符,在选择字符集时
    2024-12-12
  • MySQL添加索引及添加字段并建立索引方式

    MySQL添加索引及添加字段并建立索引方式

    这篇文章主要介绍了MySQL添加索引及添加字段并建立索引方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • MySQL之范式的使用详解

    MySQL之范式的使用详解

    这篇文章主要介绍了MySQL之范式的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • MySQL学习之日期函数的用法详解

    MySQL学习之日期函数的用法详解

    本文将学习MySQL的日期函数,在前面章节的练习中,我们就利用过NOW()函数来获取过当前系统时间,用DATEDIFF函数来计算日期相差的天数,接下来我们就系统的学习一下 日期函数
    2022-08-08

最新评论