MySQL BIT愿卸、BINARY灵临、VARBINARY、BLOB(二進制類型)
MySQL?支持兩類字符型數(shù)據(jù):文本字符串和二進制字符串趴荸。上節(jié)《MySQL數(shù)據(jù)庫(十一)——數(shù)據(jù)類型(3)字符串》我們講了文本字符串俱诸,這節(jié)我們來講解二進制字符串。
二進制字符串類型有時候也直接被稱為“二進制類型”赊舶。
MySQL 中的二進制字符串有?BIT睁搭、BINARY、VARBINARY笼平、TINYBLOB园骆、BLOB、MEDIUMBLOB?和?LONGBLOB寓调。
下表中列出了 MySQL 中的二進制數(shù)據(jù)類型锌唾,括號中的M表示可以為其指定長度。
BIT 類型
位字段類型。M 表示每個值的位數(shù)晌涕,范圍為 1~64滋捶。如果 M 被省略,默認值為 1余黎。如果為 BIT(M) 列分配的值的長度小于 M 位重窟,在值的左邊用 0 填充。例如惧财,為 BIT(6) 列分配一個值 b'101'巡扇,其效果與分配 b'000101' 相同。
BIT 數(shù)據(jù)類型用來保存位字段值垮衷,例如以二進制的形式保存數(shù)據(jù) 13厅翔,13 的二進制形式為 1101,在這里需要位數(shù)至少為 4 位的 BIT 類型搀突,即可以定義列類型為 BIT(4)刀闷。大于二進制 1111 的數(shù)據(jù)是不能插入 BIT(4) 類型的字段中的。
提示:默認情況下仰迁,MySQL 不可以插入超出該列允許范圍的值甸昏,因而插入數(shù)據(jù)時要確保插入的值在指定的范圍內(nèi)。
BINARY 和 VARBINARY 類型
BINARY 和 VARBINARY 類型類似于 CHAR 和 VARCHAR轩勘,不同的是它們包含二進制字節(jié)字符串筒扒。使用的語法格式如下:
列名稱 BINARY(M) 或者 VARBINARY(M)
BINARY 類型的長度是固定的怯邪,指定長度后绊寻,不足最大長度的,將在它們右邊填充 “\0” 補齊悬秉,以達到指定長度澄步。例如,指定列數(shù)據(jù)類型為 BINARY(3)和泌,當插入 a 時村缸,存儲的內(nèi)容實際為 “\a0\0”,當插入 ab 時武氓,實際存儲的內(nèi)容為“ab\0”梯皿,無論存儲的內(nèi)容是否達到指定的長度,存儲空間均為指定的值 M县恕。
VARBINARY 類型的長度是可變的东羹,指定好長度之后,長度可以在 0 到最大值之間忠烛。例如属提,指定列數(shù)據(jù)類型為 VARBINARY(20),如果插入的值長度只有 10,則實際存儲空間為 10 加 1冤议,實際占用的空間為字符串的實際長度加 1斟薇。
BLOB 類型
BLOB 是一個二進制的對象,用來存儲可變數(shù)量的數(shù)據(jù)恕酸。BLOB 類型分為 4 種:TINYBLOB堪滨、BLOB、MEDIUMBLOB 和 LONGBLOB尸疆,它們可容納值的最大長度不同椿猎,如下表所示。
BLOB 列存儲的是二進制字符串(字節(jié)字符串)寿弱,TEXT 列存儲的是非進制字符串(字符字符串)犯眠。BLOB 列是字符集,并且排序和比較基于列值字節(jié)的數(shù)值症革;TEXT 列有一個字符集筐咧,并且根據(jù)字符集對值進行排序和比較。