程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 更新text字段時湧現Row size too large報錯敷衍辦法

更新text字段時湧現Row size too large報錯敷衍辦法

編輯:MySQL綜合教程

更新text字段時湧現Row size too large報錯敷衍辦法。本站提示廣大學習愛好者:(更新text字段時湧現Row size too large報錯敷衍辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是更新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中優化了報錯提醒。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved