MySQL BIT数据类型
BIT是MySQL中使用的数据类型,允许我们存储位值。位值的范围为1-64。它只能存储0和1的值。如果我们存储一个值为2的位值,将返回错误消息。通常,我们可以使用create table或定义语句来定义位值。
语法:
以下是在MySQL中定义位数据类型的语法:
BIT (M);
这里,关键字 BIT 代表二进制值的存储,其值在变量 M 中提到。变量M的值可以在1-64的范围内。如果我们没有指定M的任何值,则其默认值为1。因此,下面的语句是等价的:
column_name BIT(1);
OR
column_name BIT;
如果我们想要指定位值文字,我们可以使用 b’value’ 或 0bvalue符号 。在这种记法中,该值表示一个二进制值,只能用零和一来表示。例如,b’111’和b’10000000’分别表示7和128。
位值文字的默认字符集是二进制字符串。请参见以下语句:
mysql> SELECT CHARSET(B'); -- binary
MySQL BIT示例
让我们通过一个示例来了解MySQL中BIT的概念。首先,我们将创建一个名为 my_calendars 的新表,该表包含 ‘days’ 列的BIT(7)。请参见下面的语句:
CREATE TABLE my_calendars(
years INT,
weeks INT,
days BIT(7),
PRIMARY KEY(years, weeks)
);
“days”列的值表示工作日还是休息日。这里1表示工作日,0表示休息日。
假设星期六和星期天在2020年不是工作日。在这种情况下,我们可以将一条记录插入到my_calendars表中,如下所示:
mysql> INSERT INTO my_calendars (years, weeks, days)
VALUES(2020, 2, B'1111100');
接下来,执行以下查询以从my_calendar表中检索数据:
mysql> SELECT * FROM my_calendars;
我们应该得到以下输出:
我们可以看到,检索到的结果并没有按照我们期望的格式显示数据。因此,我们将使用 BIN()函数 以二进制形式检索数据。为此,我们需要明确地将列“days”作为BIN()函数调用。
mysql> SELECT years, weeks, BIN(days) FROM my_calendars;
执行后,我们将以我们期望的方式获得输出。
如果我们在一个M位长的位列中插入一个长度不足M位的值,MySQL会自动在指定的位值左边添加零。假设第三周的第1天休息;我们可以将01111100插入到“days”列中。请参见下面的语句:
mysql> INSERT INTO my_calendars (years, weeks, days)
VALUES(2020, 1, B'111100');
经验证数据后,您可以看到它的运行完美。
我们可以看到,检索到的输出在返回结果之前移除了前导零。因此,我们将使用 LPAD() 函数正确检索数据:
mysql> SELECT years, weeks, LPAD (BIN(days), 7, '0') FROM my_calendars;
查看下面的输出:
BIT和TINYINT之间的区别
BIT和TINYINT在MySQL中有不同的用途。
BIT数据类型 用于存储1位的值,可以是0或1。它的取值范围是1到64。如果我们尝试在BIT列中插入其他值(例如2),MySQL会报错。而 TINYINT数据类型 用于存储8位整数值。它的取值范围是-128到+127或0到256,并且占用1字节。如果我们尝试在TINYINT列中插入其他值(例如987),MySQL会报错。
在本文中,我们学习了如何在MySQL表中使用和存储BIT数据类型。