首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将MySQL tinyint转换为boolean

将MySQL tinyint转换为boolean
EN

Stack Overflow用户
提问于 2019-03-27 07:29:24
回答 1查看 3.7K关注 0票数 3

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

据我所知,MySQL将tinyint列中的任何非零数视为true (在本例中为12),将0视为false。但是,当我执行一个从tinyint行为true的表中检索特定信息的查询时,它只适用于值为1的行。换句话说,值为2的行不会被查询视为true (而0被视为false)。查询应该是这样的:

代码语言:javascript
复制
SELECT data FROM table WHERE active=true

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-27 07:39:43

对于MySQL,因为2既不是1也不是0,所以2既不是TRUE也不是FALSE。考虑一下:

代码语言:javascript
复制
SELECT 2 = TRUE, 2 = FALSE;

这将返回:

代码语言:javascript
复制
| 2 = TRUE | 2 = FALSE |
| -------- | --------- |
| 0        | 0         |

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

代码语言:javascript
复制
SELECT data FROM table WHERE active > 0

这也会起作用(任何非零值都被认为是真的,见下文):

代码语言:javascript
复制
SELECT data FROM table WHERE active;

此行为是documented in the manual,它声明:

BOOL, BOOLEAN

这些类型是TINYINT(1)的同义词。零值被认为是假的。非零值被认为是真的。

代码语言:javascript
复制
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的别名,如下所示:

代码语言:javascript
复制
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                          |
+--------------------------------+
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55367639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档