5.1.5 二进制类型
MySQL支持两类字符型数据:文本字符串和二进制字符串,前面讲解了存储文本的的字符串类型,这一节将讲解MySQL中存储二进制数据的数据类型,MySQL中的二进制数据类型有:BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,本节将讲解各类二进制类型的特点和使用方法。
表5.8 MySQL中的二进制数据类型
类型名称 |
说明 |
存储需求 |
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 |
1.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)类型的字段中的。
【例5.24】创建表tmp12,定义BIT(4)类型的字段b,向表中插入数据2、9、15、16。
首先创建表tmp12,SQL语句如下:
CREATE TABLE tmp12( b BIT(4) );
插入数据:
mysql> INSERT INTOtmp12 VALUES(2), (9), (15),(16);
Query OK, 4 rows affected (0.02 sec)
Records: 4 Duplicates: 0 Warnings:1
查询插入结果:
mysql> SELECT BIN(b+0) FROM tmp12;
+------------+
| BIN(b+0) |
+------------+
| 10 |
| 1001 |
| 1111 |
| 1111 |
+------------+
4 rows in set (0.00 sec)
b+0表示将二进制的结果转换为对应的数字的值,BIN()函数将数字转换为二进制。从结果中可以看到,成功的将四个数插入到表中。
注意:插入值16的二进制值为10000,在插入之后MySQL将值裁剪到指定范围的相应端点,在这里,指定BIT为4位,因此相应的端点值为1111,并且MySQL保存裁减好的值。
2.BINARY和VARBINARY类型
BINARY和VARBINARY类型类似于CHAR和VARCHAR,不同的是它们包含二进制字节字符串。其使用的语法格式如下:
列名称 BINARY(M)或者VARBINARY(M)
BINARY类型的长度是固定的,指定长度之后,不足最大长度的,将在它们右边填充‘