MySQL Bit类型

BIT 是 MySQL 中使用的一种数据类型,它允许我们存储位值。位值在1-64 范围内。它只会在 0 和 1 中存储值。如果我们存储像 2 这样的位值,它将返回错误消息。一般我们可以用create table或者定义语句来定义bit值。

一、MySQL Bit类型 语法

以下是在 MySQL 中定义位数据类型的语法:

BIT(M);

这里,关键字 BIT 代表二进制值的存储,它的值在变量M中提到。M 的值可以在 1-64 的范围内。如果我们没有指定 M 的任何值,则它包含默认值为 1。因此,以下语句是等价的:

column_name BIT(1);  
OR   
column_name BIT;  

如果我们想指定位值文字,我们可以使用b'value'或0bvalue 表示法。在这种表示法中,该值表示只能写入0和1的二进制值。例如,b'111' 和 b'10000000' 分别代表 7 和 128。

位值字面量的默认字符集是二进制字符串。请参阅以下声明:

mysql> SELECT CHARSET(B'); -- binary  

二、MySQL Bit类型 示例

让我们通过一个例子来理解MySQL中 BIT 的概念。首先,我们将创建一个名为my_calendars的新表,其中包含 BIT(7) 形式的“days”列。请参阅以下声明:

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 位长度的位列中插入一个值,MySQL 会自动在指定位值的左侧添加零。假设第三周的第一天休息;我们可以将 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 数据类型。

热门文章

优秀文章