- BIT类型中存储的是二进制值,类似010110。
二进制字符串类型 | 长度 | 长度范围 | 占用空间 |
---|---|---|---|
BIT(M) | M | 1 <= M <= 64 | 约为(M + 7)/8个字节 |
- BIT类型,如果没有指定(
M
),默认是1
位。这个1
位,表示只能存1
位的二进制值。这里(M)是表示二进制的位数,位数最小值为1
,最大值为64
。
CREATE TABLE test_bit1(
f1 BIT,
f2 BIT(5),
f3 BIT(64)
);
INSERT INTO test_bit1(f1)
VALUES(1);
#Data too long for column 'f1' at row 1
INSERT INTO test_bit1(f1)
VALUES(2);
INSERT INTO test_bit1(f2)
VALUES(23);
DESC test_bit1;
INSERT INTO test_bit1(f1)
VALUES(0),(1);
- 超出范围,因为 bit 是二进制的,0和1,十进制的 2 转为二进制是 10,所以超出默认给出的1位范围
#Data too long for column 'f1' at row 1
INSERT INTO test_bit1(f1)
VALUES(2);
- 在 f2 中增加数据,f2 BIT(5),可以得知f2值的最大为:
1 1 1 1 1
,转为十进制为:31
,测试:
INSERT INTO test_bit1(f2)
VALUES(31);
-
超出后就会报错
-
注意:在向BIT类型的字段中插入数据时,一定要确保插入的数据在BIT类型支持的范围内。
-
使用SELECT命令查询位字段时,可以用
BIN()
或HEX()
函数进行读取。HEX()
表示十六进制
mysql> SELECT * FROM test_bit1;
+------------+------------+------------+
| f1 | f2 | f3 |
+------------+------------+------------+
| 0x01 | NULL | NULL |
| NULL | 0x17 | NULL |
+------------+------------+------------+
2 rows in set (0.00 sec)
mysql> SELECT BIN(f2),HEX(f2)
-> FROM test_bit1;
+---------+---------+
| BIN(f2) | HEX(f2) |
+---------+---------+
| NULL | NULL |
| 10111 | 17 |
+---------+---------+
2 rows in set (0.00 sec)
mysql> SELECT f2 + 0
-> FROM test_bit1;
+--------+
| f2 + 0 |
+--------+
| NULL |
| 23 |
+--------+
2 rows in set (0.00 sec)
- 可以看到,使用
b+0
查询数据时,可以直接查询出存储的十进制数据的值。