摘要:在本教程中,您将了解 MySQL BIT
数据类型以及如何使用它在表中存储BIT
数据。
MySQL BIT
数据类型简介
BIT
类型允许您存储位值。语法如下:
BIT(n)
Code language: SQL (Structured Query Language) (sql)
BIT(n)
最多可以存储 n 位值。 n
范围可以是 1 到 64。
如果跳过,则 n 的默认值为 1。因此以下语句是等效的:
column_name BIT(1);
Code language: SQL (Structured Query Language) (sql)
和
column_name BIT;
Code language: SQL (Structured Query Language) (sql)
要指定位值文字,请使用b'val'
或0bval
表示法,其中val
是仅包含 0 和 1 的二进制值。
前导b
可以写为B
,例如:
b01
B11
Code language: SQL (Structured Query Language) (sql)
是有效的位文字。
但是,前导0b
区分大小写,因此不能使用0B
。以下是无效的位文字值:
0B'1000'
Code language: SQL (Structured Query Language) (sql)
默认情况下,位值文字的字符集是二进制字符串,如下所示:
SELECT CHARSET(B'); -- binary
Code language: SQL (Structured Query Language) (sql)
MySQL BIT
示例
以下语句创建一个名为working_calendars
的新表,其中天数列为BIT(7)
:
CREATE TABLE working_calendars(
y INT
w INT,
days BIT(7),
PRIMARY KEY(y,w)
);
Code language: SQL (Structured Query Language) (sql)
days
列中的值指示该天是工作日还是休息日,即 1:工作日,0:休息日。
假设2017年第一周的星期六和星期五不是工作日,您可以在working_calendars
表中插入一行:
INSERT INTO working_calendars(y,w,days)
VALUES(2017,1,B'1111100');
Code language: SQL (Structured Query Language) (sql)
以下查询从working_calendar
表中检索数据:
SELECT
y, w , days
FROM
working_calendars;
Code language: SQL (Structured Query Language) (sql)

如您所见, days
列中的位值被转换为整数。要将其表示为位值,请使用BIN
函数:
SELECT
y, w , bin(days)
FROM
working_calendar;
Code language: SQL (Structured Query Language) (sql)

如果向长度小于n
位的BIT(n)
列插入一个值,MySQL 将在该位值的左侧填充零。
假设第二周的第一天休息,则可以在days
数列中插入01111100
。然而, 111100
值也将起作用,因为 MySQL 会向左侧填充 1 个零。
INSERT INTO working_calendars(y,w,days)
VALUES(2017,2,B'111100');
Code language: SQL (Structured Query Language) (sql)
要查看数据,请使用与上面相同的查询:
SELECT
y, w , bin(days)
FROM
working_calendars;
Code language: SQL (Structured Query Language) (sql)

正如您所看到的,MySQL 在返回结果之前删除了前导零。为了正确显示,可以使用LPAD
函数:
SELECT
y, w , lpad(bin(days),7,'0')
FROM
working_calendars;
Code language: SQL (Structured Query Language) (sql)

它按预期工作。
在本教程中,您了解了 MySQL BIT
数据类型以及如何使用它在表中存储BIT
数据。
本教程有帮助吗?