Appearance
BINARY vs VARBINARY
BINARY和VARBINARY类似于CHAR和VARCHAR,只是它们存储的是二进制字符串。 BINARY (M)为固定长度的二进制字符串,M表示最多能存储的字节数,取值范围是0~255个字符。 如果未指定(M),表示只能存储 1个字节 。例如BINARY (8),表示最多能存储8个字节,如果字段 值不足(M)个字节,将在右边填充'\0'以补齐指定长度。 VARBINARY (M)为可变长度的二进制字符串,M表示最多能存储的字节数,总字节数不能超过行的 字节长度限制65535,另外还要考虑额外字节开销,VARBINARY类型的数据除了存储数据本身外, 还需要1或2个字节来存储数据的字节数。VARBINARY类型 必须指定(M) ,否则报错。
二进制字符串类型 特点 值的长度 占用空间 BINARY(M) 固定长度 M (0 <= M <= 255) M个字节 VARBINARY(M) 可变长度 M(0 <= M <= 65535) M+1个字节
BLOB
BLOB是一个 二进制大对象 ,可以容纳可变数量的数据。 MySQL中的BLOB类型包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB 4种类型,它们可容纳值的最大 长度不同。可以存储一个二进制的大对象,比如 图片 、 音频 和 视频 等。 需要注意的是,在实际工作中,往往不会在MySQL数据库中使用BLOB类型存储大对象数据,通常会将图 片、音频和视频文件存储到 服务器的磁盘上 ,并将图片、音频和视频的访问路径存储到MySQL中。
二进制字符串类型 值的长度 长度范围 占用空间 TINYBLOB L 0 <= L <= 255 L + 1 个字节 BLOB L 0 <= L <= 65535(相当于64KB) L + 2 个字节 MEDIUMBLOB L 0 <= L <= 16777215 (相当于16MB) L + 3 个字节 LONGBLOB L 0 <= L <= 4294967295(相当于4GB) L + 4 个字节
在使用text和blob字段类型时要注意以下几点,以便更好的发挥数据库的性能。 ① BLOB和TEXT值也会引起自己的一些问题,特别是执行了大量的删除或更新操作的时候。删除这种值 会在数据表中留下很大的" 空洞 ",以后填入这些"空洞"的记录可能长度不同。为了提高性能,建议定期 使用 OPTIMIZE TABLE 功能对这类表进行 碎片整理 。 ② 如果需要对大文本字段进行模糊查询,MySQL 提供了 前缀索引 。但是仍然要在不必要的时候避免检 索大型的BLOB或TEXT值。例如,SELECT * 查询就不是很好的想法,除非你能够确定作为约束条件的 WHERE子句只会找到所需要的数据行。否则,你可能毫无目的地在网络上传输大量的值。 ③ 把BLOB或TEXT列 分离到单独的表 中。在某些环境中,如果把这些数据列移动到第二张数据表中,可 以让你把原数据表中的数据列转换为固定长度的数据行格式,那么它就是有意义的。这会 减少主表中的 碎片 ,使你得到固定长度数据行的性能优势。它还使你在主数据表上运行 SELECT * 查询的时候不会通过 网络传输大量的BLOB或TEXT值。