所以我真的很好奇这是什么原因,或者这是否真的是一个需要提交给 MySQL 开发团队的错误。
这些查询应该是等价的(它们可能难以阅读):
SELECT !0, !!0, !!!0, !!!!0, !!!!!0, !!!!!!0;
SELECT NOT 0, NOT NOT 0, NOT NOT NOT 0, NOT NOT NOT NOT 0, NOT NOT NOT NOT NOT 0, NOT NOT NOT NOT NOT NOT 0;
SELECT !(0), !(!(0)), !(!(!(0))), !(!(!(!(0)))), !(!(!(!(!(0))))), !(!(!(!(!(!(0))))));
我希望这些返回:
true, false, true, false, true, false
前两个执行,但最后一个返回:
true, true, false, false, true, true
谁能解释一下?
如果有人好奇,这源于向我提出的问题。因为 0 被视为 false 而 1 被视为 true,您可以使用一个字段 - 我们称它为 bool_field - 如下所示:
SELECT * FROM something WHERE bool_field
或
SELECT * FROM something WHERE !bool_field
通常,如果我想确保某些东西被视为 bool 值(通常不是特定语言),但又不想反转它的值,我会这样写:
SELECT * FROM something WHERE !!bool_field
这导致了一个非常奇怪的模式,并最终导致了上述问题。
MySQL版本是5.5.4
我是一名优秀的程序员,十分优秀!