MySQL数据类型--二进制类型

本文详细介绍了MySQL中的二进制数据类型,包括binary和varbinary类型,它们在创建表时指定了最大长度,binary长度固定,varbinary长度可变。接着讨论了bit类型,用于存储最多64位的二进制数据。最后提到了blob类型,适用于存储大量二进制数据。在实际应用中,需要注意各类别数据类型的长度限制和存储方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


二进制类型是在数据库中存储二进制数据的数据类型。二进制类型包括binary,varbinary,bit,tinyblob,blob,mediumblob,longblob。这篇博客这里整理一下二进制类型的特点和差异。


  • 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类型实际占用的空间为实际长度加一。这样,可以有效的节约系统的空间。


  • 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)来将值转换为二进制显示。我们现

在来实际操作下数据库中这种类型:

建表语句如下:
CREATE TABLE `linkinframe`.`test` (
  `id` INT NOT NULL,
  `a` BIT(4) NULL,
  PRIMARY KEY (`id`));
现在我们往表中插入几条数据:
INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (1,0);
INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (2,1000);
INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (3,1110);
INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (4,10000);
INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (5,0);
INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (6,8);
INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (7,14);
INSERT INTO `linkinframe`.`test` (`id`, `a`) VALUES (8,15);
执行如下查询:
SELECT * FROM linkinframe.test;

数据库显示如下:


换个查询:
SELECT BIN(a+0) FROM linkinframe.test;
数据库显示如下:




  • blob类型

blob类型是一种特殊的二进制类型。blob可以用来保存数据量很大的二进制数据,如图片等。blob类型包括tinyblob,blob,mediumblob,longblob。这几种blob类型最大的区别就是能够保存的最大长度不同。longblob的长度最大,tinyblob的长度最小。 blob类型与text类型很类似,不同点在于blob类型用于存储二进制数据,blob类型数据是根据其二进制编码进行比较和排序的,而text类型是文本模式进行比较和排序的。


  • 关于几种二进制类型的总结

1,blob类型主要用来存储图片,PDF文档等二进制文件,通常情况下,可以将图片,PDF文档都可以存储在文件系统中,然后在数据库中存储这些文件的路径,这种方式存储比直接存储在数据库中简单,但是访问速度比存储在数据库中慢。
2,实际编码中,使用二进制类型并不多,至少我从来没有使用过。这个就当了解一下好了。

<think>好的,我现在需要回答用户关于MySQL二进制数据类型的问题。首先,我得回顾一下MySQL支持哪些二进制类型。根据我的记忆,主要有BINARY、VARBINARYBLOB,可能还有BIT类型?不过用户提到引用的资料中提到BIT不被支持的部分,但那是Doris的兼容性说明,可能和MySQL本身不同。 首先,我要确定每个二进制类型的特点。BINARY和VARBINARY是固定长度和可变长度的二进制字符串,而BLOB有不同的变体,比如TINYBLOBBLOB、MEDIUMBLOB、LONGBLOB,它们的区别在于存储容量。BIT类型用于存储位字段,但需要确认它在MySQL中的具体表现。 然后,用户提到的引用[1]指出,二进制字符串在客户端以十六进制显示,取决于--binary-as-hex的设置。这可能影响数据的展示方式,需要说明这一点。引用[2]提到Doris中不支持的BIT和MEDIUMINT,但用户的问题是针对MySQL,所以可能不需要深入这部分,但需要确认BIT是否在MySQL中存在。 接下来,我需要组织这些信息,结构清晰。首先介绍各个数据类型,包括它们的存储方式、长度限制、使用场景以及相关的注意事项,比如填充空格和比较时的处理。然后,举例说明如何创建表和使用这些类型,这样用户能更直观地理解。最后,根据用户提供的引用,补充关于显示格式的内容。 另外,用户要求生成相关问题,我需要考虑用户可能进一步询问的内容,比如选择不同二进制类型的依据、存储优化、检索方法以及与字符类型的区别等。这些问题应该有助于用户深入理解各个类型的适用场景和限制。 需要验证一下各个数据类型的最大长度是否正确,比如VARBINARYMySQL中的最大长度是65535字节吗?BINARY的最大长度是255?BLOB类型的不同变体的容量是否正确?例如,TINYBLOB是255字节,BLOB是64KB,MEDIUMBLOB是16MB,LONGBLOB是4GB。这些数字需要准确无误。 还有,BIT类型MySQL中存储的是位值,例如BIT(5)可以存储5位的二进制数据,检索时可能需要使用函数如BIN()或HEX()来转换,这点需要说明清楚。同时,二进制类型在比较时是否区分大小写或填充,比如BINARY会填充空格并在比较时考虑填充,而VARBINARY不会,这也是需要注意的细节。 最后,确保回答符合用户的要求:使用中文,行内公式用$...$,独立公式用$$...$$,虽然这个问题可能不涉及数学公式,但如果有涉及的话需要正确应用。同时,引用部分要在适当的位置添加标识符,如引用[^1]和[^2]。</think>MySQL中用于存储二进制数据的主要数据类型包括以下几种: ### 1. **BINARY** - **固定长度**的二进制字符串,长度范围为$0$到$255$字节。 - 存储时**右侧填充空格**,比较时严格区分填充字符[^1]。 - 示例:`BINARY(10)` 定义长度为10字节的二进制数据。 ### 2. **VARBINARY** - **可变长度**的二进制字符串,长度范围为$0$到$65,535$字节(受行大小限制)。 - 存储时不填充空格,比较时直接按二进制值处理。 - 示例:`VARBINARY(500)` 存储最多500字节的可变二进制数据。 ### 3. **BLOB** - 用于存储**大型二进制对象**(如图片、文件),分为四种类型- `TINYBLOB`:最大$255$字节。 - `BLOB`:最大$65,535$字节(约64KB)。 - `MEDIUMBLOB`:最大$16,777,215$字节(约16MB)。 - `LONGBLOB`:最大$4,294,967,295$字节(约4GB)。 - 与`TEXT`类型类似,但区分大小写。 ### 4. **BIT** - 存储位字段值,语法为`BIT(M)`,其中$M$表示位数($1$到$64$)。 - 例如,`BIT(8)`可存储8位二进制数据(如`b'10101010'`)。 - 查询时需用函数(如`BIN()`或`HEX()`)转换输出格式[^2]。 --- ### 使用示例 ```sql CREATE TABLE binary_data ( id INT PRIMARY KEY, hash BINARY(16), payload VARBINARY(1024), image MEDIUMBLOB, flags BIT(8) ); ``` --- ### 注意事项 - 二进制数据在MySQL客户端默认以**十六进制显示**(如`0xA1B2C3`),具体取决于`--binary-as-hex`参数[^1]。 - 比较`BINARY`类型时,填充的空格会影响结果,而`VARBINARY`和`BLOB`直接比较二进制值。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值