MySQL BIT、BINARY、VARBINARY、BLOB(二進制類型)
MySQL?支持兩類字符型數據:文本字符串和二進制字符串。上節《MySQL數據庫(十一)——數據類型(3)字符串》我們講了文本字符串,這節我們來講解二進制字符串。
二進制字符串類型有時候也直接被稱為“二進制類型”。
MySQL 中的二進制字符串有?BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB?和?LONGBLOB。
下表中列出了 MySQL 中的二進制數據類型,括號中的M表示可以為其指定長度。
BIT 類型
位字段類型。M 表示每個值的位數,范圍為 1~64。如果 M 被省略,默認值為 1。如果為 BIT(M) 列分配的值的長度小于 M 位,在值的左邊用 0 填充。例如,為 BIT(6) 列分配一個值 b'101',其效果與分配 b'000101' 相同。
BIT 數據類型用來保存位字段值,例如以二進制的形式保存數據 13,13 的二進制形式為 1101,在這里需要位數至少為 4 位的 BIT 類型,即可以定義列類型為 BIT(4)。大于二進制 1111 的數據是不能插入 BIT(4) 類型的字段中的。
提示:默認情況下,MySQL 不可以插入超出該列允許范圍的值,因而插入數據時要確保插入的值在指定的范圍內。
BINARY 和 VARBINARY 類型
BINARY 和 VARBINARY 類型類似于 CHAR 和 VARCHAR,不同的是它們包含二進制字節字符串。使用的語法格式如下:
列名稱 BINARY(M) 或者 VARBINARY(M)
BINARY 類型的長度是固定的,指定長度后,不足最大長度的,將在它們右邊填充 “\0” 補齊,以達到指定長度。例如,指定列數據類型為 BINARY(3),當插入 a 時,存儲的內容實際為 “\a0\0”,當插入 ab 時,實際存儲的內容為“ab\0”,無論存儲的內容是否達到指定的長度,存儲空間均為指定的值 M。
VARBINARY 類型的長度是可變的,指定好長度之后,長度可以在 0 到最大值之間。例如,指定列數據類型為 VARBINARY(20),如果插入的值長度只有 10,則實際存儲空間為 10 加 1,實際占用的空間為字符串的實際長度加 1。
BLOB 類型
BLOB 是一個二進制的對象,用來存儲可變數量的數據。BLOB 類型分為 4 種:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB,它們可容納值的最大長度不同,如下表所示。
BLOB 列存儲的是二進制字符串(字節字符串),TEXT 列存儲的是非進制字符串(字符字符串)。BLOB 列是字符集,并且排序和比較基于列值字節的數值;TEXT 列有一個字符集,并且根據字符集對值進行排序和比較。