3.2.5 二進(jìn)制數(shù)據(jù)類型
???MySQL支持的二進(jìn)制數(shù)據(jù)類型主要有:BIT(M)掸掸、BINARY(M)氯庆、VARBINARY(M)、TINY BLOB猾漫、BLOB点晴、MEDIUM BLOB、LONG BLOB等7種悯周,它們主要用來存儲(chǔ)由“0”粒督、“1”組成的字符串,跟字符串類型數(shù)據(jù)一樣禽翼,不同的二進(jìn)制數(shù)據(jù)類型允許的最多字符個(gè)數(shù)不一樣屠橄、占用存儲(chǔ)空間也不一樣,詳見下表:
字符串類型取值范圍占用字節(jié)數(shù)說明
BIT(n)0-64最多8字節(jié)n為二進(jìn)制位
BINARY(M)0-255MM為最多允許的字節(jié)數(shù)闰挡,取值范圍為0-255之間的整數(shù)
VARBINARY(M)0-65535(216-1)L+1M為最多允許的字節(jié)數(shù)锐墙;
L為實(shí)際保存數(shù)據(jù)中字節(jié)的個(gè)數(shù);
TINYBLOB0-255
MEDIUMBLOB16777215(224-1)
LONGBLOB4294967295(232-1)
說明:
1长酗、上面幾種二進(jìn)制數(shù)據(jù)類型中溪北,BIT(n)類型以二進(jìn)制位為存儲(chǔ)單位,其余均以二進(jìn)制字節(jié)為存儲(chǔ)單位夺脾,這跟前面的字符串類型數(shù)據(jù)以字符為單位是有明顯不同的之拨。
2、BINARY(M)跟CHAR(M)類似咧叭,為定長(zhǎng)類型蚀乔,VARBINARY(M)與VARCHAR(M)、BLOB與TEXT菲茬、吉挣、TINYBLOB與TINYTEXT派撕、MEDIUMBLOB與MEDIUMTEXT、LONGBLOB與LONGTEXT也對(duì)應(yīng)類似睬魂,為變長(zhǎng)類型终吼。定長(zhǎng)類型二進(jìn)制數(shù)據(jù)和變長(zhǎng)類型二進(jìn)制數(shù)據(jù)的區(qū)別主要也有以下兩點(diǎn):
1). 定長(zhǎng)類型二進(jìn)制數(shù)據(jù)不管其中字節(jié)數(shù)有沒有達(dá)到它允許的M個(gè)字節(jié)都要占用M個(gè)字節(jié)的空間;變長(zhǎng)類型二進(jìn)制數(shù)據(jù)氯哮,其所需存儲(chǔ)空間主要取決于該串中實(shí)際包含的字節(jié)數(shù)(此字節(jié)數(shù)在上表中用L來表示)衔峰,再附加一個(gè)額外的結(jié)束字節(jié)。
2). 定長(zhǎng)類型二進(jìn)制數(shù)據(jù)中保存字節(jié)超過其允許的M個(gè)時(shí)會(huì)對(duì)所保存的數(shù)據(jù)進(jìn)行截短處理蛙粘,而不足M個(gè)時(shí)會(huì)用“\0”進(jìn)行補(bǔ)足;變長(zhǎng)類型二進(jìn)制數(shù)據(jù)保存字節(jié)超過其允許的M個(gè)時(shí)同樣會(huì)對(duì)所保存的字符串進(jìn)行截短處理威彰,而不足M個(gè)時(shí)則不會(huì)用“\0”進(jìn)行補(bǔ)足出牧。
2、從上表中我們也可看出:BINARY(M)允許的字節(jié)數(shù)少于VARBINARY(M)允許的字節(jié)數(shù)歇盼,TINYBLOB舔痕、BLOB、MEDIUMBLOB豹缀、LONGBLOB允許的字節(jié)數(shù)也是逐漸增多的伯复,并且BINARY(M)和TINYBLOB允許的字節(jié)數(shù)、VARBINARY(M)和BLOB允許的字節(jié)數(shù)對(duì)應(yīng)相等邢笙。
二進(jìn)制數(shù)據(jù)類型可用來表示長(zhǎng)的字符串(二進(jìn)制形式表示)啸如、圖片、音頻氮惯、視頻等叮雳,跟字符串類型一樣,在必須使用時(shí)妇汗,二進(jìn)制數(shù)據(jù)也應(yīng)在滿足使用要求(允許的最多字節(jié)數(shù))的前提下盡量使用“短”的數(shù)據(jù)類型帘不,以減少存儲(chǔ)空間的占用、提高查詢運(yùn)算的效率杨箭。在實(shí)際中寞焙,更多的對(duì)二進(jìn)制數(shù)據(jù)的使用是將圖片、音頻互婿、視頻等存入文件中捣郊,而不是將其存入數(shù)據(jù)表中,畢竟處理二進(jìn)制數(shù)據(jù)不是數(shù)據(jù)庫系統(tǒng)的強(qiáng)項(xiàng)擒悬。