mysql text blob_mysql的text/blob和行溢出
blob存儲二進制,text存儲文本,前者可當做大個的varbinary,而后者可看成升級版的varchar(與long varchar等價);
兩者都有4種子類型:tiny,normal(默認),medium和long,區別就在可存儲的數據長度不一樣;
而int更是有5個子類型:tiny(1字節),small(2字節),medium(3字節),normal(默認,4字節),big(8字節);
注:timestamp4字節,datatime8字節,date和time3字節;enum占用1-2個字節(最大存儲65535個字段);
限制
1 創建索引時必須指定前綴;
2 不能指定default value;
3 使用臨時表時必須為磁盤表,memory引擎不支持這兩種字段;
4 只有前max_sort_length(默認1024)字節可參與排序;
行溢出
innodb采用B+樹結構,每個數據頁至少要存儲兩個記錄(否則變成了鏈表),如果不能滿足這個需求,則會出現行溢出,innodb只保留字段前20字節
(pre-plugin保留768字節),剩余數據分配新的數據頁uncompress blob page;
行溢出只與記錄長度有關系,即便行包含blob或text,若一個數據頁可存儲兩條記錄,也不會出現行溢出;
具體可參看《MySQL技術內幕-InnoDB存儲引擎的》的4.4章節 innodb行記錄格式;
對于pre-plugin,行溢出時保留每個字段的前768字節,如果保留的字節總數仍然超出數據頁的一半大小,就會直接報錯1030- Got error 139 from storage engine。譬如一個表建立11個text或varachar(1000)字段且行記錄長度>8k,則會產生行溢出,保留在原數據頁的記錄長度=11*768>8k,此時不能再繼續行溢出了,因此只能報錯。
總結
以上是生活随笔為你收集整理的mysql text blob_mysql的text/blob和行溢出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 弹性碰撞后速度方向_两物体发生弹性碰撞后
- 下一篇: java mysql 清空表_MySQL