MySQL-二进制类型

一.二进制类型

二进制数据和文本数据在mysql 中的最大区别在于:

  1. 二进制类型存储原始的二进制数据(如图片,视频,exe文件等)。文本类型(TEXT)用来存储字符字符串(如由英文字符、中文字符或其它语言字符组成的字符串)。
  2. 二进制类型没有字符集,并且排序和比较基于列值字节的数值。TEXT类型有字符集,并且根据字符集的校对规则对值进行排序和比较。

二进制类型是存储二进制数据的数据类型,包括BINARY、VARBINARY、BIT、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。二进制类型之间的对比如下表所示。

 

 

1.BINARY和VARBINARY类型

BINARY类型和VARBINARY类型都是在创建表时指定最大长度,其基本形式如下:

    类型 (M)   

其中,“字符串类型”参数指定数据类型为BINARY类型还是VARBINARY类型;M参数指定该二进制数的最大字节长度为M。这与CHAR类型和VARCHAR类型相似。例如,BINARY(10)就是指数据类型为BINARY类型,其最大长度为10。

  1. BINARY类型的长度是固定的,在创建表时就指定了,不足最大长度的空间由″\0″补全。例如,BINARY(50)就是指定BINARY类型的长度为50。
  2. VARBINARY类型的长度是可变的,在创建表时指定了最大的长度,其长度可以在0到最大长度之间,在这个最大值范围内使用多少就分配多少。

mysql> use test;   #选择数据库test

mysql> create table bin_example(e_bin  binary(5),e_varbin varbinary(5)); #创建表 

mysql> insert into bin_example values( 'ab','ab'); #插入记录,可以是普通字符串

mysql> insert into bin_example values( b'0110000101100010',b'0110000101100010'); #插入记录,可以是二进制,与上例等同

mysql> select * from bit_example ;  #以十六进制的方式显示

2.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)类型字段中的。

操作要点:

  1. 插入数据时,使用 b位串的方式插入相应值!
  2. 查询时,可以使用 bin() 、oct() 、hex() 函数讲字段的值转成相应的二进制、八进制和十六进制.

mysql> use test;   #选择数据库test

mysql> create table bit_example (b bit(8) ); #创建表 

mysql> insert into bit_example values( b'10110111' ); #插入记录,可以是二进制位

mysql> insert into bit_example values( 'a' ); #插入记录,可以是字符,但不能超出字节长度

mysql> select bin(b) from bit_example ;  #以二进制的方式显示字段值

3.BLOB类型

1.以上各类型无须指定长度!

2.允许的长度是指实际存储的字节数,不用考虑字符编码。

 

实战建议

  • 1、 binary长度固定, 即每条数据占用等长字节空间;保存长度不超过255字节的二进制数据;
  • 2、 varbinary可变长度,可以设置最大长度,最大长度65535;适合用在长度可变的二进制数据;
  • 3、 blob不设置长度, 当不知道属性的最大长度时,适合用blob, 能用varbinary的地方不用blob;

4、 如果都可以选择,按照查询速度: binary最快, varbinary次之,blob最慢。

 

更多的关于数据库学习我会在下面的文章中陆续的分享,也可以关注‘奇牛学院’

来一起讨论

 

 

 

 

 

 

 

 

 

 

<think>好的,我现在需要回答用户关于MySQL二进制数据类型的问题。首先,我得回顾一下MySQL支持哪些二进制类型。根据我的记忆,主要有BINARY、VARBINARY、BLOB,可能还有BIT类型?不过用户提到引用的资料中提到BIT不被支持的部分,但那是Doris的兼容性说明,可能和MySQL本身不同。 首先,我要确定每个二进制类型的特点。BINARY和VARBINARY是固定长度和可变长度的二进制字符串,而BLOB有不同的变体,比如TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB,它们的区别在于存储容量。BIT类型用于存储位字段,但需要确认它在MySQL中的具体表现。 然后,用户提到的引用[1]指出,二进制字符串在客户端以十六进制显示,取决于--binary-as-hex的设置。这可能影响数据的展示方式,需要说明这一点。引用[2]提到Doris中不支持的BIT和MEDIUMINT,但用户的问题是针对MySQL,所以可能不需要深入这部分,但需要确认BIT是否在MySQL中存在。 接下来,我需要组织这些信息,结构清晰。首先介绍各个数据类型,包括它们的存储方式、长度限制、使用场景以及相关的注意事项,比如填充空格和比较时的处理。然后,举例说明如何创建表和使用这些类型,这样用户能更直观地理解。最后,根据用户提供的引用,补充关于显示格式的内容。 另外,用户要求生成相关问题,我需要考虑用户可能进一步询问的内容,比如选择不同二进制类型的依据、存储优化、检索方法以及与字符类型的区别等。这些问题应该有助于用户深入理解各个类型的适用场景和限制。 需要验证一下各个数据类型的最大长度是否正确,比如VARBINARY在MySQL中的最大长度是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、付费专栏及课程。

余额充值