MySQL BINARY和VARBINARY类型的用法(附带实例)
BINARY 和 VARBINARY 都是 MySQL 中的一个二进制字符串类型。MySQL 提供了多种二进制字符串类型,如下表所示。
BINARY 和 VARBINARY 类型类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字节字符串。其语法格式如下:
BINARY 类型的长度是固定的,指定长度之后,如果插入值长度没有达到指定长度,则将在它们右边填充“\0”以达到指定长度。例如,指定列数据类型为 BINARY(3),当插入“a”时,存储的内容实际为“a\0\0”;当插入“ab”时,实际存储的内容为“ab\0”。不管存储的内容是否达到指定的长度,其存储空间均为指定的值 M。
VARBINARY 类型的长度是可变的,指定好长度之后,插入值的长度可以在 0 到最大值之间。例如,指定列数据类型为 VARBINARY(20),如果插入值的长度只有 10,则实际存储空间为 10 加 1,即实际占用的空间为字符串的实际长度加 1。
【实例】创建表 tmp13,定义 BINARY(3) 类型的字段 b 和 VARBINARY(3)类型的字段 vb,并向表中插入数据‘5’,比较两个字段的存储空间。
1) 创建表tmp13:
2) 插入数据:
3) 查看两个字段存储数据的长度:
类型名称 | 说明 | 存储需求 |
---|---|---|
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 |
BINARY 和 VARBINARY 类型类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字节字符串。其语法格式如下:
列名称 BINARY(M)或者VARBINARY(M)
BINARY 类型的长度是固定的,指定长度之后,如果插入值长度没有达到指定长度,则将在它们右边填充“\0”以达到指定长度。例如,指定列数据类型为 BINARY(3),当插入“a”时,存储的内容实际为“a\0\0”;当插入“ab”时,实际存储的内容为“ab\0”。不管存储的内容是否达到指定的长度,其存储空间均为指定的值 M。
VARBINARY 类型的长度是可变的,指定好长度之后,插入值的长度可以在 0 到最大值之间。例如,指定列数据类型为 VARBINARY(20),如果插入值的长度只有 10,则实际存储空间为 10 加 1,即实际占用的空间为字符串的实际长度加 1。
【实例】创建表 tmp13,定义 BINARY(3) 类型的字段 b 和 VARBINARY(3)类型的字段 vb,并向表中插入数据‘5’,比较两个字段的存储空间。
1) 创建表tmp13:
CREATE TABLE tmp13(b binary(3), vb varbinary(3));
2) 插入数据:
INSERT INTO tmp13 VALUES(5,5);
3) 查看两个字段存储数据的长度:
mysql> SELECT length(b), length(vb) FROM tmp13; +-----------+---------------+ | length(b) | length(vb) | +-----------+---------------+ | 3 | 1 | +-----------+---------------+可以看到,b 字段的数据长度为 3,而 vb 字段的数据长度仅为插入的一个字符的长度 1。