MySQL tinyint 到 bool 值

标签 mysql sql where-clause sqldatatypes tinyint

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

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

SELECT data FROM table WHERE active=true

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

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

最佳答案

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

这也可以工作(任何非零值都被认为是真的,见下文):

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

关于MySQL tinyint 到 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55367639/

相关文章:

mySQL union 返回表名

mysql - 更新 SET 新的子字符串名称

javascript - 获取 SQL 表值的最有效方法是什么?

mysql - 选择一个选择的结果

sql - JOIN 比 WHERE 更快吗?

mysql - 无法检索月初之前的记录 - Mysql

mysql - 将日期时间插入表中

php - 一对多数据库输出 - 多个循环或查询?

sql - LEFT JOIN 根据 WHERE 条件的位置给出不同的数据集

c# - 迁移到 dbcontext LINQ where 子句字符串参数