MySQL innodb每行数据长度的限制
今天在使用MySQL innodb時,create table時,報(bào)出這樣的一個錯誤:
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
查閱MySQL的官方資料才發(fā)現(xiàn),每條記錄有最大長度的。MySQL的官方文檔:
鏈接:https://dev.mysql.com/doc/refman/8.0/en/column-count-limit.html#row-size-limits
?在MySQL innodb中,所有的數(shù)據(jù)都是按頁(page)來操作的,一頁就是16KB(默認(rèn)的),采用B+樹作為索引,B+樹中每個節(jié)點(diǎn)都是16KB,在最底層的每個葉子節(jié)點(diǎn)中存儲數(shù)據(jù),以主鍵索引為例,如果每個葉子節(jié)點(diǎn)為16KB,那么一行數(shù)據(jù)超過16KB時,就會出現(xiàn)行溢出,溢出的數(shù)據(jù)放到另一個page中,即uncompresse blob page
但是在B+樹中,每個葉子節(jié)點(diǎn)page中至少存儲2行數(shù)據(jù),否則就失去了意義。那么一行數(shù)據(jù)的長度就是小于8KB,在一行數(shù)據(jù)長度超過8KB時,innodb將會將剩余的部分?jǐn)?shù)據(jù)寫出到另一個溢出頁中,該列的前768字節(jié)存放在該頁中,同時有個偏移指向溢出頁。
官方給出的解決方式:
1.垂直表字段拆分或者大字段合并(大字段最多不超過768,業(yè)務(wù)進(jìn)行合并+拆分)
2.修改表的存儲引擎,modify InnoDB to MyISAM.
3.修改row_format為COMPRESSED或者DYNAMIC,當(dāng)然前提需保證innodb_file_format =Barracuda.
?
總結(jié)
以上是生活随笔為你收集整理的MySQL innodb每行数据长度的限制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GJB289A总线测试工装研究
- 下一篇: 7月29日绝地求生服务器维护,绝地求生7