MySql选择包含空值的字段

时间:2013-06-13 22:00:14

标签: mysql select null

在我们公司,我们将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

(空)表示该字段包含空字符串。 (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配置中有一个控制该行为的设置?我对此感到有点困惑。感谢每一位帮助!

提前致谢...

2 个答案:

答案 0 :(得分:4)

因为null是一种特殊情况,如果要包含空值,则应明确指定它们是否需要它们。

SELECT * FROM table WHERE(data1<>'abc'或数据为空)

The right server behavior, is ignore nulls unless you ask for them...

答案 1 :(得分:0)

SELECT * FROM `table` WHERE `data1` = '';