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種,它們主要用來存儲由“0”、“1”組成的字符串,跟字符串類型數(shù)據(jù)一樣,不同的二進(jìn)制數(shù)據(jù)類型允許的最多字符個(gè)數(shù)不一樣、占用存儲空間也不一樣,詳見下表:

字符串類型取值范圍占用字節(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)制位為存儲單位,其余均以二進(jìn)制字節(jié)為存儲單位,這跟前面的字符串類型數(shù)據(jù)以字符為單位是有明顯不同的。
2、BINARY(M)跟CHAR(M)類似,為定長類型,VARBINARY(M)與VARCHAR(M)、BLOB與TEXT、、TINYBLOB與TINYTEXT、MEDIUMBLOB與MEDIUMTEXT、LONGBLOB與LONGTEXT也對應(yīng)類似,為變長類型。定長類型二進(jìn)制數(shù)據(jù)和變長類型二進(jìn)制數(shù)據(jù)的區(qū)別主要也有以下兩點(diǎn):
1). 定長類型二進(jìn)制數(shù)據(jù)不管其中字節(jié)數(shù)有沒有達(dá)到它允許的M個(gè)字節(jié)都要占用M個(gè)字節(jié)的空間;變長類型二進(jìn)制數(shù)據(jù),其所需存儲空間主要取決于該串中實(shí)際包含的字節(jié)數(shù)(此字節(jié)數(shù)在上表中用L來表示),再附加一個(gè)額外的結(jié)束字節(jié)。
2). 定長類型二進(jìn)制數(shù)據(jù)中保存字節(jié)超過其允許的M個(gè)時(shí)會對所保存的數(shù)據(jù)進(jìn)行截短處理,而不足M個(gè)時(shí)會用“\0”進(jìn)行補(bǔ)足;變長類型二進(jìn)制數(shù)據(jù)保存字節(jié)超過其允許的M個(gè)時(shí)同樣會對所保存的字符串進(jìn)行截短處理,而不足M個(gè)時(shí)則不會用“\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ù)對應(yīng)相等。
二進(jìn)制數(shù)據(jù)類型可用來表示長的字符串(二進(jìn)制形式表示)、圖片、音頻、視頻等,跟字符串類型一樣,在必須使用時(shí),二進(jìn)制數(shù)據(jù)也應(yīng)在滿足使用要求(允許的最多字節(jié)數(shù))的前提下盡量使用“短”的數(shù)據(jù)類型,以減少存儲空間的占用、提高查詢運(yùn)算的效率。在實(shí)際中,更多的對二進(jìn)制數(shù)據(jù)的使用是將圖片、音頻、視頻等存入文件中,而不是將其存入數(shù)據(jù)表中,畢竟處理二進(jìn)制數(shù)據(jù)不是數(shù)據(jù)庫系統(tǒng)的強(qiáng)項(xiàng)。