Home  >  Article  >  Database  >  更新text字段时出现Row size too large报错_MySQL

更新text字段时出现Row size too large报错_MySQL

WBOY
WBOYOriginal
2016-06-01 13:35:461035browse

bitsCN.com

更新text字段时出现Row size too large报错

 

起因:

 

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

   www.bitsCN.com  

更新SQL如下:

UPDATE table_name d SET d.column_name='aaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 

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类型。

   www.bitsCN.com  

个人之前理解是:

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

 

bitsCN.com
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn