您的位置:首页 > 其它

Row size too large

2016-09-06 10:07 363 查看
转自:http://www.2cto.com/database/201303/193422.html

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

 
起因:
 
团购开发报告说更新时出错。
   www.2cto.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.2cto.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐