对于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
这个也可以工作(任何非零值都被视为true,请参见下文):
SELECT data FROM table WHERE active;
这个行为在手册中有记录,其中说明:
BOOL, BOOLEAN
这些类型是TINYINT(1)
的同义词。零被视为false,非零值被视为true。
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 |
+
SELECT data FROM table WHERE active
将(而不是应该)按照手册所说的工作,因为任何非零值都被视为真。您可能还想考虑添加SELECT IF(2, 'true', 'false');
和SELECT IF(0, 'true', 'false');
到您的示例中。否则,这是一个非常全面的答案,SO需要更多这样的内容... - Nick