Kiểu dữ liệu BIT(1) - nhỏ nhất cho 1 bit trong MySQL
Kiểu BIT(1) chỉ chiếm 1 bit lưu trữ, phù hợp cho cờ true/false, on/off, yes/no.
Cú pháp
yourColumnName BIT(1)
Ví dụ tạo bảng
mysql> CREATE TABLE bitDemo (
-> isValid BIT(1)
-> );
Kiểm tra cấu trúc:
mysql> SHOW CREATE TABLE bitDemo; CREATE TABLE `bitdemo` ( `isValid` bit(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Chèn dữ liệu
mysql> INSERT INTO bitDemo VALUES (0), (1), (1), (0);
Hiển thị gốc (hiển thị nhị phân không đọc được):
+---------+ | isValid | +---------+ | | | | | | | | +---------+
Hiển thị giá trị số (cộng 0):
mysql> SELECT isValid + 0 FROM bitDemo;
+-----------+ | isValid+0 | +-----------+ | 0 | | 1 | | 1 | | 0 | +-----------+
So sánh các kiểu boolean-like
| Kiểu | Kích thước | Giá trị | Ghi chú |
|---|---|---|---|
| BIT(1) | 1 bit | 0/1 | Nhỏ nhất, gom 8 cột = 1 byte |
| TINYINT(1) | 1 byte | -128..127 | Thường dùng cho BOOLEAN |
| BOOLEAN | 1 byte | TRUE/FALSE | Alias của TINYINT(1) |
| CHAR(1) | 1 byte | 'Y'/'N' | Dễ đọc, tốn không gian hơn BIT |
| ENUM('Y','N') | 1 byte | 'Y'/'N' | Ràng buộc giá trị |
Lưu ý BIT(M)
BIT(M)với M từ 1-64- M ≤ 8: 1 byte, M ≤ 16: 2 bytes, ..., M ≤ 64: 8 bytes
- MySQL gom nhiều cột BIT liên tiếp vào cùng 1 byte để tiết kiệm
- Giá trị literal:
b'1',b'0',b'101'
Khi nào dùng BIT(1)?
- Bảng cực lớn (triệu hàng), cần tiết kiệm tối đa
- Nhiều cờ boolean cùng lúc (gom nhóm 8 cột = 1 byte)
- Khi không cần index (BIT index kém hiệu quả)