Mysql 简明教程

MySQL - BIT

在编程语言中,位表示基本数据单元。它只能存储两个值,表示为 0 或 1。

The MySQL BIT Data Type

MySQL BIT 数据类型用于存储指定范围内的二进制值。范围由你分配给 BIT 列的位数决定。

如果我们尝试插入一个整数,而不是 BIT 值,MySQL 会将其自动转换为 BIT 值。我们必须确保要添加的整数必须在可转换为 BIT 值的范围内。

例如,如果你有一个 BIT(3) 列,它可以在二进制中存储从 000 到 111 的值,这在整数格式中对应于 0 到 7。如果你尝试将整数 8 插入此 BIT(3) 列,你将收到一条错误消息,因为 8 在二进制中是 1000,超出此列的有效范围。

Syntax

以下是 MySQL BIT 数据类型语法:

BIT(n)

此处, n 值的范围为 1 到 64。如果你没有提供“n”值,默认值为 1,产生一个单比特 BIT 列。因此,以下查询将产生相同的结果:

Column_name BIT(1);
and
Column_name BIT;

Bit Value Literal

  1. 若要指定位值文本,可以使用 b’val 或 0bval 符号,其中 val 是仅包含 0 和 1 的二进制值。前面的“b”不区分大小写。

  2. 请注意,0b 符号区分大小写,因此 0B'1000' 是一个无效的位文本值。

Example

让我们创建一个名为 STUDENTS 的表,并对 AGE 列使用 BIT 数据类型,如下所示 −

CREATE TABLE STUDENTS(
   ID int auto_increment,
   NAME varchar(40),
   AGE BIT(3),
   primary key (ID)
);

以下是所获得的输出 −

Query OK, 0 rows affected (0.01 sec)

现在,我们将 AGE 列中的值“5”和“3”插入到 STUDENTS 表中 −

INSERT INTO STUDENTS (NAME, AGE) VALUES
('Varun', 5),
('Akash', 3);

上述查询的输出如下所示:

Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

我们可以使用以下查询显示 STUDENTS 表中 AGE 列中插入的值 −

SELECT * from STUDENTS;

我们可以在下面的输出中看到,值“5”和“3”以二进制格式存储 −

现在,让我们插入另一个值“10”。在二进制格式中,“10”表示为“1010”。然而,我们定义的 AGE 列只能达到三个位。因此,以下查询将生成一个错误,因为值 10 大于 7 −

INSERT INTO STUDENTS (NAME, AGE) VALUES ('Priya', 10);

输出表明数据对 AGE 列来说太长了。

ERROR 1406 (22001): Data too long for column 'AGE' at row 1

要将位值文字插入到 “AGE” 列中,您可以使用 B’val 表示法。在这里,我们插入的是“110”,它等价于整数值“6”,如下所示 −

INSERT INTO STUDENTS (NAME, AGE) VALUES('Priya', B'110');

获得的结果如下 −

Query OK, 1 row affected (0.01 sec)

让我们使用以下查询显示 “STUDENTS” 表中的所有记录 −

SELECT * from STUDENTS;

我们可以在下面的输出中看到,值“6”已被以二进制格式插入为“0x06” −

Verification

要验证并以二进制/位格式显示“AGE”列中的插入值,您可以使用 MySQL BIN()函数 −

SELECT ID, NAME, BIN(AGE) FROM STUDENTS;

输出以二进制格式显示值 −

在上面的输出中,我们可以看到前导零被移除了。如果我们希望显示它们,我们可以使用 LPAD 函数,如下所示 −

SELECT ID, NAME, LPAD(BIN(AGE), 5, "0") FROM STUDENTS;

以下是所获得的输出 −

BIT Datatype Using a Client Program

我们还可以使用客户端程序创建 BIT 数据类型列。

Syntax

Example

以下是这些程序 −