对于 MySQL,因为2
is not1
也0
, then 2
is 也不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 |
+--------------------------------+