因此,我在数据库中有一个tinyint
数据类型列,用于存储从0
到2
的值。
据我所知,MySQL将tinyint
列中的任何非零数视为true (在本例中为1
和2
),将0
视为false。但是,当我执行一个从tinyint
行为true
的表中检索特定信息的查询时,它只适用于值为1
的行。换句话说,值为2
的行不会被查询视为true
(而0
被视为false
)。查询应该是这样的:
SELECT data FROM table WHERE active=true
其中,active
的数据类型为tinyint
,并且之前已根据大小写为其分配了0
、1
或2
值。
我对MySQL还很陌生,所以我不知道这里是否遗漏了一些细节,但是我不明白为什么它不返回值为2的行上的请求数据。任何想法都可以在这里有所帮助。
发布于 2019-03-27 07:39:43
对于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;
此行为是documented in the manual,它声明:
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 |
+--------------------------------+
https://stackoverflow.com/questions/55367639
复制相似问题