为什么 MySQL 将“TRUE 或 TRUE 和 FALSE”评估为 true?

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

MySQL IF Function Explained with Practical Examples

Three-valued logic

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签