MySQL BIT 数据类型
简介:本教程向您介绍允许存储位值的MySQL BIT数据类型。
MySQL BIT数据类型简介
MySQL提供了允许您存储位值的BIT
类型。BIT(m)
可存储多达m位值,其中m的范围可以从1到64。
如果省略,则默认值m为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');
MySQL BIT示例
以下语句创建一个表为working_calendar
days 字段为 BIT(7)
类型:
CREATE TABLE working_calendar( y INT, w INT, days BIT(7), PRIMARY KEY(y,w) );
days
列中的值表示工作日或休息日,即1:工作日和0:休息日。
假设2017年第一周的周六和周五不是工作日,您可以在working_calendar
表格插入一行,如下所示:
INSERT INTO working_calendar(y,w,days) VALUES(2017,1,B'1111100');以下查询从
working_calendar
表中检索数据:
SELECT y, w , days FROM working_calendar;
+------+---+------+ | y | w | days | +------+---+------+ | 2017 | 1 | | | +------+---+------+ 1 rows in set (0.00 sec)如您所见,
days
列中的位值是一个竖杠|
。要将其表示为位值,请使用以下BIN
函数:
SELECT y, w , bin(days) FROM working_calendar;
+------+---+-----------+ | y | w | bin(days) | +------+---+-----------+ | 2017 | 1 | 1111100 | +------+---+-----------+ 1 row in set (0.00 sec)如果向一个
BIT(m)
小于m位长的列插入一个值,MySQL将在位值的左侧填充零。
假设第二周的第一天是关闭的,可以插入01111100
到 days
列。但是, 111100
值也将起作用,因为MySQL将在左侧填充一个零。
INSERT INTO working_calendar(y,w,days) VALUES(2017,2,B'111100');要查看数据,请使用与上述相同的查询:
SELECT y, w , bin(days) FROM working_calendar;
+------+---+-----------+ | y | w | bin(days) | +------+---+-----------+ | 2017 | 1 | 1111100 | | 2017 | 2 | 111100 | +------+---+-----------+ 2 rows in set (0.00 sec)如您所见,MySQL在返回结果之前删除了前导零。要正确显示,您可以使用以下
LPAD
功能:
SELECT y, w , lpad(bin(days),7,'0') FROM working_calendar;
+------+---+-----------------------+ | y | w | lpad(bin(days),7,'0') | +------+---+-----------------------+ | 2017 | 1 | 1111100 | | 2017 | 2 | 0111100 | +------+---+-----------------------+ 2 rows in set (0.00 sec)现在工作正常。 在本教程中,您学习了如何使用MySQL BIT类型来存储位值。