dmc*_*mc4 3 mysql sql tinyint where-clause sqldatatypes
所以tinyint我的数据库中有一个数据类型列,我在其中存储了从0to 的值2。
我的理解是 MySQL 将列中的任何非零数字tinyint视为真(在本例中为1和2),将0视为假。但是,当我执行从tinyint行所在的表中检索某些信息的查询时true,它仅适用于具有1作为值的行。换句话说,具有2作为值的行不被true查询0视为(并且被视为false)。查询将类似于:
SELECT data FROM table WHERE active=true
Run Code Online (Sandbox Code Playgroud)
其中active是数据类型,tinyint并且之前已为其分配值0,1或2视情况而定。
我对 MySQL 还很陌生,所以我不知道这里是否有一些细节我可能会遗漏,但我不明白为什么它没有在值为 2 的行上返回请求的数据。任何想法都可以在这里提供帮助。
对 MySQL 来说,因为2既不是也不1是0,那么2既不是也不TRUE是FALSE。考虑:
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)
但是,值
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 |
+--------------------------------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3145 次 |
| 最近记录: |