前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【mysql】二进制字符串类型

【mysql】二进制字符串类型

原创
作者头像
兮动人
发布2022-03-13 10:33:33
1.9K0
发布2022-03-13 10:33:33
举报
文章被收录于专栏:兮动人的博客兮动人的博客

二进制字符串类型

  • MySQL中的二进制字符串类型主要存储一些二进制数据,比如可以存储图片、音频和视频等二进制数据。
  • MySQL中支持的二进制字符串类型主要包括BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB类型。

1. BINARY与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个字节

举例:

创建表:

代码语言:sql
复制
CREATE TABLE test_binary1(
f1 BINARY,
f2 BINARY(3),
# f3 VARBINARY,
f4 VARBINARY(10)
);
在这里插入图片描述
在这里插入图片描述

添加数据:

代码语言:sql
复制
INSERT INTO test_binary1(f1,f2)
VALUES('a','a');
在这里插入图片描述
在这里插入图片描述
  • 添加失败,因为一个汉字占两个字节
在这里插入图片描述
在这里插入图片描述
  • 添加成功,因为 f2 长度是3个字节
    在这里插入图片描述
    在这里插入图片描述
  • 添加成功,因为一个字母占一个字节INSERT INTO test_binary1(f1,f2) VALUES('a','abc');
    在这里插入图片描述
    在这里插入图片描述
代码语言:sql
复制
INSERT INTO test_binary1(f2,f4)
VALUES('ab','ab');
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 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 个字节

举例:

代码语言:sql
复制
CREATE TABLE test_blob1(
id INT,
img MEDIUMBLOB
);

INSERT INTO test_blob1(id)
VALUES (1001);

SELECT *
FROM test_blob1;
在这里插入图片描述
在这里插入图片描述

TEXT和BLOB的使用注意事项:

在使用textblob字段类型时要注意以下几点,以便更好的发挥数据库的性能。

① BLOB和TEXT值也会引起自己的一些问题,特别是执行了大量的删除或更新操作的时候。删除这种值会在数据表中留下很大的"空洞",以后填入这些"空洞"的记录可能长度不同。为了提高性能,建议定期使用 OPTIMIZE TABLE 功能对这类表进行碎片整理

② 如果需要对大文本字段进行模糊查询,MySQL 提供了前缀索引。但是仍然要在不必要的时候避免检索大型的BLOB或TEXT值。例如,SELECT * 查询就不是很好的想法,除非你能够确定作为约束条件的WHERE子句只会找到所需要的数据行。否则,可能毫无目的地在网络上传输大量的值。

③ 把BLOB或TEXT列分离到单独的表中。在某些环境中,如果把这些数据列移动到第二张数据表中,可以让你把原数据表中的数据列转换为固定长度的数据行格式,那么它就是有意义的。这会减少主表中的碎片,使你得到固定长度数据行的性能优势。它还使你在主数据表上运行 SELECT * 查询的时候不会通过网络传输大量的BLOB或TEXT值。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二进制字符串类型
    • 1. BINARY与VARBINARY类型
      • 2. BLOB类型
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档