在我们公司,我们将 Web 应用程序 (LAMP) 从一台服务器 (Ubuntu 10.04) 移到了新服务器 (Ubuntu 12.04.2)。现在我们遇到了我以前从未见过的奇怪行为,我真的不知道从哪里开始。也许有人可以给我提示。
我们有以下简单的表格:
id data1 data2 data3
(int) (varchar) (int) (int)
-------------------------------------
1 (empty) 123 456
2 (null) 321 654
3 abc 555 666
(empty) 表示该字段包含一个空字符串。(null) 表示该字段为空。现在我们使用以下非常非常简单的查询:
SELECT * FROM `table` WHERE `data1` != 'abc';
在我们的旧服务器上,查询返回 id 为 1 和 2 的行,我猜这绝对正确,因为!='abc'
匹配这两个记录集。
在我们的新服务器上,查询只返回 id 为 1 的记录集。在选择字段中包含 null 的记录集突然被查询以某种方式忽略。
只是为了更清楚:我知道IS NULL
可以使用,但这会导致检查应用程序中与这种情况匹配的所有查询和表。
现在的问题是:
我们是否在旧服务器上运气好,通过返回第 1 行和第 2 行查询行为符合预期,或者新服务器通过仅返回第 1 行行为正确?
一般来说:应该!='abc'
匹配记录集 1 和 2 还是应该只匹配 id 1?
mysql配置中是否有可能控制该行为?我对此有点坚持。每一个帮助表示赞赏!
提前致谢...