MySQL tinid 布尔值

MySQL tinyint to boolean

所以我的数据库中有一个 tinyint 数据类型列,我在其中存储从 02 的值。

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

SELECT data FROM table WHERE active=true

其中 active 的数据类型为 tinyint,并且之前已根据情况为其分配了 012 的值。

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

到MySQL,因为2既不是1也不是0,那么2既不是TRUE也不是FALSE ].考虑:

SELECT 2 = TRUE, 2 = FALSE;

这个returns:

| 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

These types are synonyms for TINYINT(1). A value of zero is considered false. Nonzero values are considered 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                   |
+------------------------+

However, the values TRUE and FALSE are merely aliases for 1 and 0, respectively, as shown here:

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