MySQL bit型別

2019-10-16 22:58:29

本教學將向您介紹如何儲存和使用位值的MySQL BIT資料型別。

MySQL BIT資料型別簡介

MySQL提供了允許您儲存位值的BIT型別。BIT(m)可以儲存多達m位的值,m的範圍在164之間。

如果省略,預設值為1。所以下列陳述是一樣的:

column_name BIT(1);

以及,

column_name BIT;

要指定一個位值字面值,可使用b'val'0bval來表示,該val是僅包含01的二進位制值。

開頭字元b可以寫成B,例如,以下兩種方式都一樣:

b01
B11

上面書寫方式都是有效的位字面量。

但是,前導0b是區分大小寫的,所以不能使用0B。以下是無效的字面值:

0B'1000'

預設情況下,位值文字的字元集是二進位制字串,如下所示:

SELECT CHARSET(B''); -- binary

執行結果如下 -

mysql> SELECT CHARSET(B'');
+--------------+
| CHARSET(B'') |
+--------------+
| binary       |
+--------------+
1 row in set

MySQL BIT範例

以下語句建立一個名為working_calendar的新表,其中的列型別和寬度指定為BIT(7)

USE testdb;

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 | 1111100 |
+------+---+---------+
1 row in set

如上所見,days列中的位值被轉換成一個整數。要將其表示為位值,請使用BIN函式:

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

執行上面查詢語句,得到以下結果 -

+------+---+-----------+
| y    | w | bin(days) |
+------+---+-----------+
| 2017 | 1 | 1111100   |
+------+---+-----------+
1 row in set

如果將值插入到長度小於m位的BIT(m)列中,MySQL將在位值的左側使用零填充。

假設第二週的第一天關閉,可以向days列中插入01111100值。 但是,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

如您所見,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

現在工作正常了。

在本教學中,您已經學會了如何使用MySQL BIT型別來儲存位值。