MySQL tinyint 到 boolean

dmc*_*mc4 3 mysql sql tinyint where-clause sqldatatypes

所以tinyint我的数据库中有一个数据类型列,我在其中存储了从0to 的值2

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

SELECT data FROM table WHERE active=true
Run Code Online (Sandbox Code Playgroud)

其中active是数据类型,tinyint并且之前已为其分配值012视情况而定。

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

GMB*_*GMB 5

对 MySQL 来说,因为2既不是也不10,那么2既不是也不TRUEFALSE。考虑:

SELECT 2 = TRUE, 2 = FALSE;
Run Code Online (Sandbox Code Playgroud)

这将返回:

| 2 = TRUE | 2 = FALSE |
| -------- | --------- |
| 0        | 0         |
Run Code Online (Sandbox Code Playgroud)

您需要以不同方式表达条件,例如:

SELECT data FROM table WHERE active > 0
Run Code Online (Sandbox Code Playgroud)

这也将起作用(任何非零值都被认为是正确的,请参阅进一步内容):

SELECT data FROM table WHERE active;
Run Code Online (Sandbox Code Playgroud)

此行为记录在手册中,其中指出:

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                   |
+------------------------+
Run Code Online (Sandbox Code Playgroud)

但是,值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                          |
+--------------------------------+
Run Code Online (Sandbox Code Playgroud)