Giới thiệu
MySQL lưu BOOLEAN thực chất là TINYINT(1): TRUE = 1, FALSE = 0. Để hiển thị dễ hiểu, dùng hàm IF() hoặc CASE để ánh xạ sang nhãn văn bản.
Ví dụ thực hành
1. Tạo bảng DemoTable815
mysql> CREATE TABLE DemoTable815 (Gender BOOLEAN);
2. Chèn dữ liệu
mysql> INSERT INTO DemoTable815 VALUES (TRUE), (FALSE), (FALSE), (TRUE);
3. Hiển thị dạng số (0/1)
mysql> SELECT * FROM DemoTable815;
+--------+
| Gender |
+--------+
| 1 |
| 0 |
| 0 |
| 1 |
+--------+
4. Chuyển đổi sang chuỗi với IF()
mysql> SELECT IF(Gender = TRUE, 'MALE', 'FEMALE') AS `String` FROM DemoTable815;
5. Kết quả
+--------+
| String |
+--------+
| MALE |
| FEMALE |
| FEMALE |
| MALE |
+--------+
Cách thay thế: CASE WHEN (chuẩn SQL, linh hoạt hơn)
SELECT CASE Gender WHEN TRUE THEN 'MALE' ELSE 'FEMALE' END AS `String` FROM DemoTable815;
-- Hoặc xử lý NULL an toàn
SELECT CASE WHEN Gender IS NULL THEN 'UNKNOWN' WHEN Gender THEN 'MALE' ELSE 'FEMALE' END AS `String`
FROM DemoTable815;
Thiết kế bảng tốt hơn
- Dùng
ENUM('MALE','FEMALE','OTHER')thay vì BOOLEAN → lưu trực tiếp nhãn, dễ đọc, ràng buộc giá trị. - Hoặc
TINYINT UNSIGNED+CHECK (Gender IN (0,1,2))(MySQL 8.0.16+ enforce CHECK). - Tránh lưu 'Male'/'Female' dạng VARCHAR (tốn dung lượng, dễ sai chính tả).
Lưu ý
IF()là hàm MySQL-specific.CASEchuẩn SQL, nên dùng cho code di động.Gender = TRUEtương đươngGender = 1hoặc chỉGender(vì TRUE=1).