手机
当前位置:查字典教程网 >编程开发 >mysql数据库 >更新text字段时出现Row size too large报错应付措施
更新text字段时出现Row size too large报错应付措施
摘要:起因:团购开发报告说更新时出错。更新SQL如下:复制代码代码如下:UPDATEtable_namedSETd.column_name='aa...

起因:

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

更新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中优化了报错提示。

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

MYSQL where 1=1判定中的作用说明

MySQL无法启动、无法停止解决方法(安全设置后容易出现)

MySQL 索引分析和优化

MySQL添加删除主键的方法

MySQL: mysql is not running but lock exists 的解决方法

Linux下安装Mysql多实例作为数据备份服务器实现多主到一从多实例的备份

Mysql 本地计算机无法启动 mysql 服务 错误 1067:进程意外终止。

MySQL中的RAND()函数使用详解

利用MySQL加密函数保护Web网站敏感数据的方法分享

如何选择合适的MySQL存储引擎

精品推荐
分类导航