MySQL - 在两台服务器上返回不同的true / false查询

时间:2013-12-04 23:31:56

标签: mysql sql

对此感到困惑。

在两台服务器上运行相同版本的MySQL。 (从完全相同的rpm构建) - 某些开发人员改变某些东西......

服务器1:

mysql> select ( not 1 = 2 );

0
1 row in set (0.00 sec)

服务器2:

mysql> select ( not 1 = 2 );

1
1 row in set (0.00 sec)

两台服务器:

mysql> sHOW VARIABLES LIKE 'version';

| version       | 5.6.12 |

1 个答案:

答案 0 :(得分:2)

您应该检查HIGH_NOT_PRECEDENCE运营商。

官方文件指出:

  

NOT运算符的优先级使得诸如NOT a BETWEEN b AND c之类的表达式被解析为NOT(BETWEEN b AND c)。在某些旧版本的MySQL中,表达式被解析为(不是)BETWEEN b和c。通过启用HIGH_NOT_PRECEDENCE SQL模式可以获得旧的高优先级行为。

小提琴测试此行为here

顺便说一句,我建议您比较x != y而不是使用not (x = y)