MySql “Row size too large (大於 8126)”

今天在對MySQL數據庫進行數據處理時,遇到一個錯誤:

Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help.

我處理的這張表有400列,有大量的VARCHAR和TEXT列,以前遇到過該表中VARCHAR總長度超過65532的錯誤,第一眼看到,誤以爲是VARCHAR超長的問題。

【嘗試一】於是我把一些較大的VARCHAR列換成了TEXT類型,但是問題依然存在。

【嘗試二】根據錯誤信息的提示,我又在創建表時添加了ROW_FORMAT=DYNAMIC設置,但是問題依然存在。

【嘗試三】後來我懷疑數據庫引擎的問題,因爲我們常用的是MyISAM引擎,但是我新裝MySQL後,默認是InnoDb,而我也一直沒有修改。於是我移除了創建表時的ROW_FORMAT設置,增加了Engine=MyISAM。問題解決了。

【原理淺析】根據網上的一些資料,這個問題可能與不同引擎之間使用的存儲格式有關。MyISAM有3種行存儲格式:fixed/dynamic/compressed。InnoDb在MyIASM基礎上新引入了Barracuda。至於不同引擎的默認設置,以及各種存儲格式之間的區別,我也沒有深入研究,有興趣的話可以去了解一下。

【InnoDb的解決方案】後來我在stackoverflow中看到了InnoDb中的解決方案(未嘗試):

http://stackoverflow.com/questions/15585602/change-limit-for-mysql-row-size-too-large

【其他問題】另外,stackoverflow上還提到了日誌文件設置過小也可能引起該問題的情況:

http://stackoverflow.com/questions/22637733/mysql-error-code-1118-row-size-too-large-8126-changing-some-columns-to-te

http://www.alanzeng.cn/2016/03/mysql-row-size-too-large-8126/
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章