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

废话就不多说了,开始。。。

    因起:

    

开辟呈文说更新时犯错。

    

 

    

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

文章结束给大家分享下程序员的一些笑话语录: N多年前,JohnHein博士的一项研究表明:Mac用户平均IQ要比PC用户低15%。超过6000多的参加者接受了测试,结果清晰的显示IQ比较低的人会倾向于使用Mac。Mac用户只答对了基础问题的75%,而PC用户却高达83%。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值