3

所以我的tinyint数据库中有一个数据类型列,我将值从0to存储到2.

据我了解,MySQL 将列中的任何非零数tinyint视为真(在本例中为1and 2)和0假。tinyint但是,当我执行从行所在的表中检索某些信息的查询时true,它仅适用于具有1值的行。换句话说,具有2作为值的行不会被true查询视为(并且0被视为false)。查询将类似于:

SELECT data FROM table WHERE active=true

Whereactive是数据类型tinyint,并且之前已分配了或的值0,具体取决于具体情况。12

我对 MySQL 还很陌生,所以我不知道这里是否有一些我可能遗漏的细节,但我不知道为什么它没有返回以 2 作为值的行上的请求数据。任何想法都可以在这里提供帮助。

4

1 回答 1

6

对于 MySQL,因为2is not10, then 2is 也不TRUEFALSE。考虑:

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                   |
+------------------------+

但是,值TRUEFALSE分别只是 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                          |
+--------------------------------+
于 2019-03-26T23:39:42.750 回答