二进制字符串一般用于存储二进制的大对象,二进制字符串类型有BIT、BLOB、BINARY和VARBINARY。
二进制字符串一般用于存储二进制的大对象,二进制字符串类型有 BIT、BLOB、BINARY 和 VARBINARY。
概述
与字符串一样,二进制字符串也是一个字节序列。但与通常包含文本格式信息的字符串不同,二进制串用于存储非传统数据,如图像、音频和视频文件、程序可执行文件等。二进制字符串可以用于与字符串类似的目的(例如,以 Microsoft Word 格式存储文档),但两种数据类型不兼容;两者的差别如同文本和同一文本的照片。
在实际操作中,一般不建议将二进制的大文件存储在数据库中,而是将大对象的物理位置存储在数据中,但是有特殊需要的情况下,还是有将二进制大对象存储在数据库的可能。
二进制字符串和普通字符串的区别有两个:首先,二进制字符串完全可以存储字节零值,以及其他“不可打印”的字节(定义在 32 到 126 范围之外的字节)。普通字符串不允许存储字节零值.并且也不允许存储那些不符合选定的字符集编码的非法字节值或字节序列 第二,对二进制字符串的处理实际上就是处理字节,而对字符串的处理,则取决于区域设置。简单地说,二进制字符串适用于存储那些程序员认为是“原始字节”的数据,比如图片内容,而字符串则适合存储文本。
二进制字符串类型
MySQL 中的二进制数据类型有:BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。
BIT 类型
BIT 类型是位字段类型。M 表示每个值的位数,范围为 l~64。如果 M 被省略,默认为 1。如果为 BIT(M)列分配的值的长度小于 M 位,在值的左边用 0 填充。例如,为 BIT(6)列分配一个值 b’101’,其效果与分配 b’000101’相同。BIT 数据类型用来保存位字段值,例如:以二进制的形式保存数据 13,13 的二进制形式为 1101,在这里需要位数至少为 4 位的 BIT 类型,即可以定义列类型为 BIT(4)。大于二进制 ll ll 的数据是不能插入 BIT(4)类型的字段中的。
BINARY 和 VARBINARY 类型
BINARY 和 VARBINARY 类型类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字节字符串。其使用的语法格式如下:
列名称 BINARY(M)或者 VARBINARY(M);
BINARY 类型的长度是固定的,指定长度之后,不足最大长度的,将在它们右边填充‘’补齐以达到指定长度。例如:指定列数据类型为 BINARY(3),当插入‘a’时,存储的内容实际为“a”,当插入“ab”时,实际存储的内容为“ab”,不管存储的内容是否达到指定的长度,其存储空间均为指定的值 M。
VARBlNARY 类型的长度是可变的,指定好长度之后,其长度可以在 0 到最大值之间。例如:指定列数据类型为 VARBINARY(20),如果插入的值的长度只有 10,则实际存储空间为 10 加 l,即其实际占用的空间为字符串的实际长度加 l。
BLOB 类型
BLOB 是一个二进制大对象,用来存储可变数量的数据。BLOB 类型分为 4 种:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB,它们可容纳值的最大长度不同,如表所示。
BLOB 列存储的是二进制字符串(字节字符串);TEXT 列存储的是非二进制字符串(字符字符串)。BLOB 列没有字符集,并且排序和比较基于列值字节的数值;TEXT 列有一个字符集,并且根据字符集对值进行排序和比较。