Для MySQL, поскольку 2
не является ни 1
, ни 0
, тогда 2
не является ни TRUE
, ни FALSE
.Рассмотрим:
SELECT 2 = TRUE, 2 = FALSE;
Возвращает:
| 2 = TRUE | 2 = FALSE |
| -------- | --------- |
| 0 | 0 |
Вам нужно будет выразить условие по-другому, например:
SELECT data FROM table WHERE active > 0
Это также будет работать (любой-нулевое значение считается истинным, см. далее):
SELECT data FROM table WHERE active;
Это поведение задокументировано в руководстве , в котором говорится:
BOOL, BOOLEAN
Эти типы являются синонимами для TINYINT(1)
.Нулевое значение считается ложным.Ненулевые значения считаются истинными.
mysql> SELECT IF(0, 'true', 'false');
+------------------------+
| IF(0, 'true', 'false') |
+------------------------+
| false |
+------------------------+
mysql> SELECT IF(1, 'true', 'false');
+------------------------+
| IF(1, 'true', 'false') |
+------------------------+
| true |
+------------------------+
mysql> SELECT IF(2, 'true', 'false');
+------------------------+
| IF(2, 'true', 'false') |
+------------------------+
| true |
+------------------------+
Однако значения TRUE
и FALSE
являются просто псевдонимами для 1 и 0 соответственно, как показано здесь:
mysql> SELECT IF(0 = FALSE, 'true', 'false');
+--------------------------------+
| IF(0 = FALSE, 'true', 'false') |
+--------------------------------+
| true |
+--------------------------------+
mysql> SELECT IF(1 = TRUE, 'true', 'false');
+-------------------------------+
| IF(1 = TRUE, 'true', 'false') |
+-------------------------------+
| true |
+-------------------------------+
mysql> SELECT IF(2 = TRUE, 'true', 'false');
+-------------------------------+
| IF(2 = TRUE, 'true', 'false') |
+-------------------------------+
| false |
+-------------------------------+
mysql> SELECT IF(2 = FALSE, 'true', 'false');
+--------------------------------+
| IF(2 = FALSE, 'true', 'false') |
+--------------------------------+
| false |
+--------------------------------+