Trong MySQL, BOOL và BOOLEAN là alias của TINYINT(1). Giá trị TRUE = 1, FALSE = 0. Để ép kiểu rõ ràng, dùng CAST().
Ví dụ minh họa
Tạo bảng cột BOOL:
CREATE TABLE convertBoolToIntDemo (
isYoung BOOL
);
Kiểm tra kiểu thực tế (DESC):
+---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | isYoung | tinyint(1) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+
→ MySQL nội bộ lưu BOOL là TINYINT(1).
Chèn dữ liệu:
INSERT INTO convertBoolToIntDemo VALUES (TRUE), (FALSE), (TRUE), (FALSE);
SELECT trực tiếp (hiển thị 1/0):
+---------+ | isYoung | +---------+ | 1 | | 0 | | 1 | | 0 | +---------+
Ép kiểu rõ ràng sang SIGNED INTEGER:
SELECT CAST(isYoung = 1 AS SIGNED INTEGER) FROM convertBoolToIntDemo;
Kết quả (1/0):
+-----------------------------------+ | CAST(isYoung=1 AS SIGNED INTEGER) | +-----------------------------------+ | 1 | | 0 | | 1 | | 0 | +-----------------------------------+
Giải thích:
isYoung = 1trả về boolean (1/0).CAST(... AS SIGNED INTEGER)đảm bảo kiểu trả về là INT có dấu.- Thực tế chỉ cần
SELECT isYoung + 0hoặcCAST(isYoung AS UNSIGNED)cũng cho 1/0.