MySQL二进制类型
二进制类型是在数据库中存储二进制数据的数据类型。二进制类型包括BINARY、VARBINARY、BIT、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB等。
MySQL的二进制类型如下表所示:
整数类型
取值范围
BINARY(M)
字节数为M字节,允许长度为0~M的固定长度二进制字符串
VARBINARY(M)
允许长度为0~M字节的可变长度二进制字符串,字节数为值的长度加1
BIT(M)
M位二进制数据,M最大值为64位
TINYBLOB
可变长度二进制数据,最多255个字节
BLOB
可变长度二进制数据,最多65535(216-1)个字节
MEDIUMBLOB
可变长度二进制数据,最多16777215(224-1)个字节
LONGBLOB
可变长度二进制数据,最多4294967295或4GB(232-1)个字节
BINARY类型和VARBINARY类型
BINARY类型和VARBINARY类型都是在创建表时指定了最大长度。基本的语法格式如下:
字符串类型(M)
其中,“字符串类型”指定了数据类型为BINARY类型还是VARBINARY类型;“M”指定了该二进制数的最大字节长度为M。这与CHAR类型和VARCHAR类型相似。例如,BINARY(10)就是指数据类型为BINARY类型,其最大长度为10。
BINARY类型的长度是固定的,在创建表时就指定了。不足最大长度的空间由“\0”补全。例如,BINARY(50)就是指定BINARY类型的长度为50。
VARBINARY类型的长度是可变的,在创建表时指定了最大长度。指定好了VARBINARY类型的最大值以后,其长度可以在0到最大长度之间。例如,VARBINARY(50)的最大字节长度是50。
但是,不是每条记录的字节长度都是50,在这个最大值范围内,使用多少分配多少。VARBINARY类型实际占用的空间为实际长度加1。这样,可以有效的节约系统的空间。
实例
1. 创建数据表table14,定义BINARY(3)类型的字段b和VARBINARY(30)类型的字段vb。如下图所示:
2. 向数据表中插入数据'5'。如下图所示:
3. 查看两个字段存储数据的长度。SQL代码如下:
SELECT length(b),length(vb) FROM table14;
如下图所示:
从上图中代码执行的结果可以看出,b字段的值数据长度为3,而vb字段的值数据长度仅为插入的一个字符的长度1。
4. 下面进一步确认'5'在两个字段中不同的存储方式。SQL语句代码如下:
SELECT b,vb,b='5',b='5\0\0',vb='5',vb='5\0\0' FROM table14;
如下图所示:
从上图中代码执行的结果可以看出,b字段和vb字段的长度是截然不同的,因为b字段不足的空间填充了'\0',而vb字段则没有填充。
BIT类型
BIT类型也是在创建表时指定了最大长度。基本的语法格式如下:
BIT(M)
其中,“M”指定了该二进制数的最大字节长度为M,M的最大值为64。例如,BIT(4)就是数据类型为BIT的类型,长度为4。
如果字段的类型为BIT(4),存储的数据是从0~15。因为,变成二进制以后,15的值为1111,其长度为4。如果插入的值为16,其二进制数为10000,长度为5,超过了最大长度,所以,大于等于16的数是不能插入到BIT(4)类型的字段中的。
在查询BIT数据类型的数据时,要用BIN(字段名+0)来将值转换为二进制显示。
实例
1. 创建数据表table15,定义BIT(4)类型的字段b。如下图所示:
2. 向数据表中插入数据2、9、15、16。如下图所示:
3. 查询插入结果。如下图所示:
b+0表示将二进制的结果转换为对应的数字的值,BIN()函数将数字转换为二进制。从结果可以看出,成功的将四个数插入到表中了。
提示
插入值16的二进制值为10000,在插入之后MySQL将值裁剪到指定范围的相应端点,在这里,指定BIT为4位,因此相应的端点值为1111,并且MySQL保存裁剪好的值。虽然默认情况下,MySQL可以插入超出该列允许范围的值,但是需要对数据进行裁剪,因而插入的数据可能是不正确的,所以要确保插入的值在指定的范围内。
BLOB类型
BLOB类型是一种特殊的二进制类型。BLOB可以用来保存数据量很大的二进制数据,如图片等。BLOB类型包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。这几种BLOB类型最大的区别就是能够保存的最大长度不同。LONGBLOB的长度最大,TINYBLOB的长度最小。
BLOB类型与TEXT类型很类似,不同点在于BLOB类型用于存储二进制数据,BLOB类型数据是根据其二进制编码进行比较和排序,而TEXT类型是文本模式进行比较和排序的。
BLOB列没有字符集,并且排序和比较基于列值字节的数值;TEXT列有一个字符集,并且根据字符集对值进行排序和比较。
BLOB类型主要用于存储图片、PDF文档等二进制文件。通常情况下,可以将图片、PDF文档等都保存在文件系统中,然后在数据库中存储这些文件的路径。