最新在更新項(xiàng)目的時(shí)候,需要對(duì)一些數(shù)據(jù)表增加幾個(gè)新的字段。前面增加兩個(gè)的時(shí)候還很正常沒有出現(xiàn)異常情況,在增加的時(shí)候就開始報(bào)錯(cuò)了,報(bào)錯(cuò)的內(nèi)容是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可能會(huì)有所幫助。在當(dāng)前的行格式中,768字節(jié)的BLOB前綴是內(nèi)聯(lián)存儲(chǔ)的。
普通翻譯一下就是,單行數(shù)據(jù)的長度太長了,不允許在增加字段了,你可以把之前的字段類型改稱text或者blob的格式來縮減長度然后在增加字段,但是這個(gè)解決方式有點(diǎn)不徹底,加的多的話還是解決不了。
這里直接就把徹底解決的方式解釋一下,如果你的表使用的是REDUNDAN或者COMPACT的行格式,那么我們只需要把行格式改稱DYNAMIC就可以了。
數(shù)據(jù)庫的行格式根據(jù)不同的數(shù)據(jù)庫系統(tǒng)可能有所不同。以下是MySQL中的四種行格式:
REDUNDANT(冗余行格式):
這是MySQL 5.0之前默認(rèn)的行格式。
特點(diǎn)包括將前768字節(jié)的變長列值存儲(chǔ)在B樹節(jié)點(diǎn)的索引記錄中,多余的部分存儲(chǔ)在溢出頁。
對(duì)于大于768字節(jié)的固定長度列,會(huì)被編碼為可變長度列并可能存儲(chǔ)在頁面外。
這種格式在MySQL 5.0及之后的版本中逐漸被新的行格式所取代,但在某些系統(tǒng)表中可能仍然使用。
COMPACT(緊湊行格式):
MySQL 5.0及更高版本默認(rèn)的行格式(在某些MySQL版本中,如MySQL 5.7,默認(rèn)行格式可能已更改為DYNAMIC)。
與REDUNDANT相比,COMPACT行格式減少了存儲(chǔ)空間的使用,并可能提高性能,尤其是在緩存命中率和磁盤速度有限制的情況下。
它也使用溢出頁來存儲(chǔ)超過768字節(jié)的列值,但整體存儲(chǔ)結(jié)構(gòu)更加緊湊。
DYNAMIC(動(dòng)態(tài)行格式):
MySQL 5.7及更高版本的默認(rèn)行格式(在啟用了Barracuda文件格式的InnoDB存儲(chǔ)引擎中)。
這種行格式支持更長的可變長度列和更大的索引鍵前綴,能夠更好地處理大型數(shù)據(jù)集和復(fù)雜查詢。
它將長列值完全存儲(chǔ)在溢出頁中,并在記錄頭中僅存儲(chǔ)指向這些溢出頁的指針,從而減少了記錄頭的大小并提高了存儲(chǔ)效率。
COMPRESSED(壓縮行格式):
類似于DYNAMIC行格式,但增加了對(duì)表和索引數(shù)據(jù)的壓縮支持。
通過壓縮數(shù)據(jù),可以進(jìn)一步減少存儲(chǔ)空間的使用,但可能會(huì)增加CPU的使用率,因?yàn)閿?shù)據(jù)在讀取和寫入時(shí)需要進(jìn)行壓縮和解壓。
要使用COMPRESSED行格式,需要啟用innodb_file_per_table選項(xiàng),并確保InnoDB存儲(chǔ)引擎使用的是Barracuda文件格式。