关于MySQL的BIT类型

本文介绍了MySQL中的BIT数据类型,用于存储位字段,可容纳1-64位的二进制数。BIT类型的数据查看需借助bin()或hex()函数,并能进行数值比较。在插入数据时,会将值转换为二进制,若位数超过定义的宽度,则插入会失败。例如,尝试向bit(1)列插入2(二进制10)会导致失败,而扩大到bit(2)则可成功。同时,插入字符时,会先转化为对应字符集编码存储。

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

BIT类型,用于存放位字段类型,BIT(M)可以存放多位二进制数,M的范围是1-64,默认是1,如:

mysql> create table test(id int primary key,col1 bit);
Query OK, 0 rows affected (0.03 sec)

mysql> desc test;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO   | PRI | NULL    |       |
| col1  | bit(1)  | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

直接使用select是无法看到bit类型的内容的,

mysql> insert into test values (1,1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+----+------+
| id | col1 |
+----+------+
|  1 |     |
+----+------+
1 row in set (0.00 sec)

可以用bin()或hex()函数进行读取,

mysql> select bin(col1),hex(col1) from test;
+-----------+-----------+
| bin(col1) | hex(col1) |
+-----------+-----------+
| 1         | 1         |
+-----------+-----------+
1 row in set (0.00 sec)

BIT类型可以进行数值比较,

mysql> select bin(col1) from test where col1=1;
+-----------+
| bin(col1) |
+-----------+
| 1         |
+-----------+
1 row in set (0.00 sec)

mysql> select bin(col1) from test where col1<10;
+-----------+
| bin(col1) |
+-----------+
| 1         |
+-----------+
1 row in set (0.00 sec)

数据插入bit类型字段时,先转换为二进制,如果bit类型字段的位数允许,插入成功,否则插入失败,

mysql> insert into test values (2,2);
ERROR 1406 (22001): Data too long for column 'col1' at row 1

当向bit(1)的col1列插入2时,由于2的二进制表示为10,需要两位,所以插入失败。将col1改为bit(2)即可插入成功:

mysql> alter table test modify col1 bit(2);
Query OK, 1 row affected (0.05 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into test values (2,2);
Query OK, 1 row affected (0.00 sec)

mysql> select id,bin(col1) from test;
+----+-----------+
| id | bin(col1) |
+----+-----------+
|  1 | 1         |
|  2 | 10        |
+----+-----------+
2 rows in set (0.00 sec)

同样的,向bit类型字段插入字符也会转换成对应的字符集编码再存储:

mysql> insert into test values (3,'a');
Query OK, 1 row affected (0.01 sec)

mysql> select id,bin(col1) from test;
+----+-----------+
| id | bin(col1) |
+----+-----------+
|  1 | 1         |
|  2 | 10        |
|  3 | 1100001   |
+----+-----------+
3 rows in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值