日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL innodb每行数据长度的限制

發(fā)布時間:2023/12/20 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL innodb每行数据长度的限制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天在使用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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。