MySQL BIT、BINARY、VARBINARY、BLOB(二進制類型)
mysql 支持兩類字符型數據:文本字符串和二進制字符串。上節《MySQL字符串類型》我們講了文本字符串,這節我們來講解二進制字符串。
下表中列出了 MySQL 中的二進制數據類型,括號中的
BIT 數據類型用來保存位字段值,例如以二進制的形式保存數據 13,13 的二進制形式為 1101,在這里需要位數至少為 4 位的 BIT 類型,即可以定義列類型為 BIT(4)。大于二進制 1111 的數據是不能插入 BIT(4) 類型的字段中的。
VARBINARY 類型的長度是可變的,指定好長度之后,長度可以在 0 到最大值之間。例如,指定列數據類型為 VARBINARY(20),如果插入的值長度只有 10,則實際存儲空間為 10 加 1,實際占用的空間為字符串的實際長度加 1。
BLOB 列存儲的是二進制字符串(字節字符串),TEXT 列存儲的是非進制字符串(字符字符串)。BLOB 列是字符集,并且排序和比較基于列值字節的數值;TEXT 列有一個字符集,并且根據字符集對值進行排序和比較。
二進制字符串類型有時候也直接被稱為“二進制類型”。MySQL 中的二進制字符串有 BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。
下表中列出了 MySQL 中的二進制數據類型,括號中的
M
表示可以為其指定長度。類型名稱 | 說明 | 存儲需求 |
---|---|---|
BIT(M) | 位字段類型 | 大約 (M+7)/8 字節 |
BINARY(M) | 固定長度二進制字符串 | M 字節 |
VARBINARY (M) | 可變長度二進制字符串 | M+1 字節 |
TINYBLOB (M) | 非常小的BLOB | L+1 字節,在此,L<2^8 |
BLOB (M) | 小 BLOB | L+2 字節,在此,L<2^16 |
MEDIUMBLOB (M) | 中等大小的BLOB | L+3 字節,在此,L<2^24 |
LONGBLOB (M) | 非常大的BLOB | L+4 字節,在此,L<2^32 |
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,它們可容納值的最大長度不同,如下表所示。數據類型 | 存儲范圍 |
---|---|
TINYBLOB | 最大長度為255 (28-1)字節 |
BLOB | 最大長度為65535 (216-1)字節 |
MEDIUMBLOB | 最大長度為16777215 (224-1)字節 |
LONGBLOB | 最大長度為4294967295或4GB (231-1)字節 |
BLOB 列存儲的是二進制字符串(字節字符串),TEXT 列存儲的是非進制字符串(字符字符串)。BLOB 列是字符集,并且排序和比較基于列值字節的數值;TEXT 列有一個字符集,并且根據字符集對值進行排序和比較。
beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。
通俗易懂,深入淺出,一篇文章只講一個知識點。
文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。
文章不涉及代碼,不燒腦細胞,人人都可以學習。
當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!