源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-11-06 06:08 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:更新text字段时出现Row size too large报错应付措施
[b]起因[/b]: 团购开发报告说更新时出错。 [b]更新SQL如下[/b]:
[u]复制代码[/u] 代码如下:
UPDATE table_name d SET d.column_name='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' WHERE d.ID=100976;
[b]报错信息如下[/b]: 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 [b]疑惑[/b]: 更新字段只涉及 column_name字段,且该字段是TEXT类型。 [b]个人之前理解是[/b]: 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 [b]所以总结为一句话就是[/b]:如果某个表的text字段很多建议建表时加上 row_format = dynamic 当然,回过头来MySQL的报错也是有误导性的,bug库中也对confirm了这个bug(点击查看),并在5.1.61中优化了报错提示。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部