1. MySQL 中的 Boolean 类型
MySQL 中的 Boolean 类型实际上是 Tinyint(1) 类型,也就是一个 1 位的整型。在 MySQL 中,0 被认为是 false,而非 0 的数字均被认为是 true。
2. MySQL 对于 TRUE 或 TRUE 和 FALSE 的评估
MySQL 在评估 TRUE 或 TRUE 和 FALSE 时,会将其都视为 true。这是因为在 MySQL 中,非零数字都被视为 true 而不仅仅是 1,而 TRUE 和 FALSE 分别表示 1 和 0,因此它们被视为 true。
3. 示例
下面是一个示例,说明 MySQL 如何处理 TRUE 或 TRUE 和 FALSE:
SELECT 'TRUE' = TRUE;
执行结果:
+----------------+
| 'TRUE' = TRUE |
+----------------+
| 1 |
+----------------+
以上代码说明了,MySQL 将字符串 'TRUE' 和 bool 类型的 TRUE 都视为 true。我们同样可以测试 'FALSE' 和 bool 类型的 FALSE:
SELECT 'FALSE' = FALSE;
执行结果:
+-----------------+
| 'FALSE' = FALSE |
+-----------------+
| 1 |
+-----------------+
4. 更好的理解
真正理解 MySQL 的这种行为还需要结合另一个概念:三值逻辑(Three-Valued Logic)。在三值逻辑中,除了 true 和 false 外,还有一个未定义的值 UNKNOWN。这个值表示某个值不适用于某种情况,即不知道这个值是否是 true 或 false。
举个例子:假设你要查询所有 Score 大于 90 的字符串。由于 MySQL 中大于号只允许数字的比较,因此 MySQL 必须将这个字符串转换成数字进行比较。但是,由于 Score 字段中可能包含一些非数字字符,因此 MySQL 无法确定这些值的大小,因此就返回了 UNKNOWN。此外,在某些情况下,在使用 NULL 时也会发生这种情况。
4.1. 常见的以 TRUE、FALSE 为参数的函数
在许多 MySQL 函数中,TRUE 和 FALSE 是常见的参数。例如,IF() 函数将测试条件作为第一个参数,并在条件为 true 时返回第二个参数,否则返回第三个参数。以下是一个带有 TRUE 和 FALSE 的 IF() 函数的示例:
IF(TRUE, 'Yes', 'No');
执行结果:
+------------------+
| IF(TRUE, 'Yes', 'No') |
+------------------+
| Yes |
+------------------+
同样,我们可以测试 IF() 函数的第一个参数传递 FALSE:
IF(FALSE, 'Yes', 'No');
执行结果:
+-------------------+
| IF(FALSE, 'Yes', 'No') |
+-------------------+
| No |
+-------------------+
5. 结论
在 MySQL 中,TRUE 或 TRUE 和 FALSE 被视为 true 是因为非零数字都被视为 true 而不仅仅是 1,而 TRUE 和 FALSE 分别表示 1 和 0,因此它们被视为 true。
此外,在 MySQL 中,三值逻辑是必不可少的,它确保了在无法确定某个值是 true 还是 false 时不会出现错误。
参考文献
MySQL官方文档
MySQL - Boolean/Logical Data Type