MySQL tinyint转换为boolean

时间:2019-03-26 23:29:24

标签: mysql sql sqldatatypes tinyint

因此,我在数据库中有一个tinyint数据类型列,用于存储从02的值。

据我了解,MySQL将tinyint列中的任何非零数字都视为真(在这种情况下为12),而0被视为假。但是,当我执行查询以从tinyint行为true的表中检索某些信息时,它仅适用于以1作为值的行。换句话说,具有2作为值的行在查询中不会被视为true(而0被视为false)。该查询将类似于:

SELECT data FROM table WHERE active=true

其中active的数据类型为tinyint,并且根据情况为它预先分配了012的值。

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

1 个答案:

答案 0 :(得分:4)

对于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;

此行为是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                   |
+------------------------+
  

但是,值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                          |
+--------------------------------+