Внутренне в MySQL нет значений bool. Выражения, которые, по-видимому, возвращают логические значения, фактически возвращают целое число 0 или 1:
SELECT (3 < 5)
1
SELECT (3 > 5)
0
SELECT (3 < 4) + (4 < 5)
2
SELECT TRUE
1
TRUE и FALSE - это псевдонимы для 1 и 0.
NULL не равно ни одному значению, даже другому NULL.
SELECT NULL = ''
NULL
SELECT NULL = NULL
NULL
Если вы хотите сравнить с NULL, используйте IS NULL
.
Обновление: возникла путаница по поводу того, поддерживает ли MySQL логические значения. В этом примере показано, что даже тип BOOL для столбца по-прежнему представляет собой целое число:
CREATE TABLE table1 (id INT, x BOOL);
INSERT INTO table1 VALUES
(1, TRUE),
(2, FALSE),
(3, 3); -- Can you insert 3 into a BOOL type? Yep!
SELECT * FROM TABLE1;
Результаты:
id x
1 1
2 0
3 3