1. 程式人生 > >MySql “Row size too large (> 8126)”

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。至於不同引擎的預設設定,以及各種儲存格式之間的區別,我也沒有深入研究,有興趣的話可以去了解一下。