最新在更新項目的時候,需要對一些數據表增加幾個新的字段。前面增加兩個的時候還很正常沒有出現異常情況,在增加的時候就開始報錯了,報錯的內容是Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.翻譯翻譯的意思就是:行大小太大(>8126)。將某些列更改為TEXT或BLOB,或使用ROW_FORMAT=DYNAMIC或ROW_FORMAT=COMPRESSED可能會有所幫助。在當前的行格式中,768字節的BLOB前綴是內聯存儲的。
普通翻譯一下就是,單行數據的長度太長了,不允許在增加字段了,你可以把之前的字段類型改稱text或者blob的格式來縮減長度然后在增加字段,但是這個解決方式有點不徹底,加的多的話還是解決不了。
這里直接就把徹底解決的方式解釋一下,如果你的表使用的是REDUNDAN或者COMPACT的行格式,那么我們只需要把行格式改稱DYNAMIC就可以了。
數據庫的行格式根據不同的數據庫系統可能有所不同。以下是MySQL中的四種行格式:
REDUNDANT(冗余行格式):
這是MySQL 5.0之前默認的行格式。
特點包括將前768字節的變長列值存儲在B樹節點的索引記錄中,多余的部分存儲在溢出頁。
對于大于768字節的固定長度列,會被編碼為可變長度列并可能存儲在頁面外。
這種格式在MySQL 5.0及之后的版本中逐漸被新的行格式所取代,但在某些系統表中可能仍然使用。
COMPACT(緊湊行格式):
MySQL 5.0及更高版本默認的行格式(在某些MySQL版本中,如MySQL 5.7,默認行格式可能已更改為DYNAMIC)。
與REDUNDANT相比,COMPACT行格式減少了存儲空間的使用,并可能提高性能,尤其是在緩存命中率和磁盤速度有限制的情況下。
它也使用溢出頁來存儲超過768字節的列值,但整體存儲結構更加緊湊。
DYNAMIC(動態行格式):
MySQL 5.7及更高版本的默認行格式(在啟用了Barracuda文件格式的InnoDB存儲引擎中)。
這種行格式支持更長的可變長度列和更大的索引鍵前綴,能夠更好地處理大型數據集和復雜查詢。
它將長列值完全存儲在溢出頁中,并在記錄頭中僅存儲指向這些溢出頁的指針,從而減少了記錄頭的大小并提高了存儲效率。
COMPRESSED(壓縮行格式):
類似于DYNAMIC行格式,但增加了對表和索引數據的壓縮支持。
通過壓縮數據,可以進一步減少存儲空間的使用,但可能會增加CPU的使用率,因為數據在讀取和寫入時需要進行壓縮和解壓。
要使用COMPRESSED行格式,需要啟用innodb_file_per_table選項,并確保InnoDB存儲引擎使用的是Barracuda文件格式。




