Skip to main content

MySQL位数据类型的实际使用

MySQL位数据类型简介

允许您存储位值的位类型。以下是语法:

BIT(n)

位(n)最多可存储n位值。n的范围从1到64。

如果跳过,n的默认值为1。因此,以下陈述是等效的:

column_name BIT(1);

column_name BIT;

要指定位值文字,可以使用b'val'或0bval表示法,其中val是一个只包含0和1的二进制值。

前导b可以写成b,例如:

b01
B11

是有效的位文本。

但是,前导0b区分大小写,因此不能使用0b。以下是无效的位文字值:

0B'1000'

默认情况下,位值文字的字符集是二进制字符串,如下所示:

SELECT CHARSET(B'); -- binary

MySQL位示例

下面的语句创建了一个名为working_calendars的新表,其days列为位(7):

CREATE TABLE working_calendars(
y INT
w INT,
days BIT(7),
PRIMARY KEY(y,w)
);

“天”列中的值表示该天是工作日还是休息日,即1:工作日和0:休息日。

假设2017年第一周的周六和周五不是工作日,可以在working_calendars表中插入一行:

INSERT INTO working_calendars(y,w,days)
VALUES(2017,1,B'1111100');

以下查询从工作日历表中检索数据:

SELECT 
y, w , days
FROM
working_calendars;

MySQL BIT example

如您所见,days列中的位值被转换为整数。要将其表示为位值,可以使用BIN函数:

SELECT 
y, w , bin(days)
FROM
working_calendar;

MySQL BIT BIN function

如果在长度小于n位的位(n)列中插入一个值,MySQL将在该位值的左侧填充零。

假设第二周的第一天是休息日,可以在days列中插入0111100。然而,111100的值也会起作用,因为MySQL会在左边加一个零。

INSERT INTO working_calendars(y,w,days)
VALUES(2017,2,B'111100');

要查看数据,请使用与上述相同的查询:

SELECT 
y, w , bin(days)
FROM
working_calendars;

MySQL BIT insert example

如您所见,MySQL在返回结果之前删除了前导零。要正确显示,可以使用LPAD函数:

SELECT 
y, w , lpad(bin(days),7,'0')
FROM
working_calendars;

MySQL BIT LPAD example

它按预期工作。

在本教程中,您学习了MySQL位数据类型,以及如何使用它在表中存储位数据。