位类型:BIT
  • 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;

【mysql】位类型BIT_mysql位类型BIT

INSERT INTO test_bit1(f1)
VALUES(0),(1);

【mysql】位类型BIT_mysql_02
控制台上查看是显示16进制的
【mysql】位类型BIT_mysql位类型BIT_03

  • 超出范围,因为 bit 是二进制的,0和1,十进制的 2 转为二进制是 10,所以超出默认给出的1位范围
#Data too long for column 'f1' at row 1
INSERT INTO test_bit1(f1)
VALUES(2);

【mysql】位类型BIT_mysql位类型BIT_04

  • 在 f2 中增加数据,f2 BIT(5),可以得知f2值的最大为:1 1 1 1 1 ,转为十进制为:31,测试:
INSERT INTO test_bit1(f2)
VALUES(31);

【mysql】位类型BIT_mysql bit_05

  • 超出后就会报错
    【mysql】位类型BIT_数据_06

  • 注意:在向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查询数据时,可以直接查询出存储的十进制数据的值。