MySQL BIT 数据类型介绍
在本文中,我们将带您了解 MySQL 中的 BIT
数据类型以及如何使用 BIT
数据类型存储状态值。
在 MySQL 中 BIT
数据类型被用来存储二进制的位值。我们通常使用 BIT
数据类型的列存储状态值,比如布尔值等。 BIT
数据类型也是易于扩展的。
MySQL BIT
语法
当我们使用 BIT
数据类型时,需要指定一个位数参数。这是语法:
BIT(M)
这里:
BIT(M)
允许存储M
位值。M
的取值范围是1
到64
。- 如果不指定
M
,那么它的默认值为1
。BIT
等效于BIT(1)
。
BIT 字面值
当我们需要向 BIT
列中插入 BIT
值时,需要使用 BIT
字面量。 BIT
字面量可以使用如下格式:
b'val'
B'val'
0bval
这里 val
是二进制值,它仅包含 0
和 1
。例如:
b'01'
B'01'
0b01
注意,前导 b
和 B
是等效的。但是 0b
是正确的前导符号,而 0B
不是正确的前导符号。下面是几个不正确的 BIT
字面值:
b'2' -- 2 不是正确的 2 进制数
0B01 -- 不能用 0B 前导,应使用 0b
MySQL BIT
实例
BIT
列非常适合用来存储状态值。在下例子中,我们将创建一个订单状态表 order_state
,表中包含了一个用来存储订单状态的 state
列。我们先预设订单有如下状态:
状态 | 状态十进制值 | 状态二进制值 |
---|---|---|
待支付 | 0 | 000 |
已支付 | 1 | 001 |
待发货 | 2 | 010 |
已发货 | 3 | 011 |
已完成 | 4 | 100 |
二进制值最大位数是 3 位,那么 state
列的数据类型可以使用 state BIT(3)
。
我们使用下面的 sql 语句创建表:
CREATE TABLE order_state (
order_id INT NOT NULL PRIMARY KEY,
state BIT(3) NOT NULL
);
插入 BIT
值
现在,让我我们插入一条状态为 3
的行,我们可以使用 3
, b'011'
, B'011'
, 0b011
其中的任意一个。如下:
INSERT INTO order_state (order_id, state)
VALUES (1, 3),
(2, b'011'),
(3, B'011'),
(4, 0b011);
现在让我通过以下 SQL 查询 order_state
表中的所有行:
SELECT * FROM order_state;
+----------+--------------+
| order_id | state |
+----------+--------------+
| 1 | 0x03 |
| 2 | 0x03 |
| 3 | 0x03 |
| 4 | 0x03 |
+----------+--------------+
展示 BIT
列值
如果我们想让输出结果更可读一些,可以使用如下函数或者表达式转为其他进制显示:
BIN()
转为二进制OCT()
转为八进制HEX()
转为十六进制state+0
转为十进制
SELECT order_id,
state + 0,
BIN(state),
OCT(state),
HEX(state)
FROM order_state;
+----------+---------+------------+------------+------------+
| order_id | state+0 | BIN(state) | OCT(state) | HEX(state) |
+----------+---------+------------+------------+------------+
| 1 | 3 | 11 | 3 | 3 |
| 2 | 3 | 11 | 3 | 3 |
| 3 | 3 | 11 | 3 | 3 |
| 4 | 3 | 11 | 3 | 3 |
+----------+---------+------------+------------+------------+
这里,我们将 state 分别以 十进制、二进制、八进制、十六进制输出出来。
将 BIT
列作为过滤条件
如果我们使用 BIT
列作为 WHERE
子句中的过滤条件,可以直接使用其对应的十进制或者 BIT
字面值。如下:
SELECT * FROM order_state WHERE state = 3;
SELECT * FROM order_state WHERE state = (3);
SELECT * FROM order_state WHERE state = b'011';
SELECT * FROM order_state WHERE state = B'011';
SELECT * FROM order_state WHERE state = 0b011;
结论
在本文中,我们带您了解 MySQL 中的 BIT
数据类型以及如何使用 BIT
数据类型存储状态值。
BIT
数据类型用来存储二进制的位值,它适合用来存储状态值。BIT(M)
允许存储M
位值。M
的取值范围是1
到64
。- 如果不指定
M
,那么它的默认值为1
。BIT
等效于BIT(1)
。