在我们公司,我们将web应用程序(LAMP)从一个服务器(Ubuntu 10.04)移动到一个新服务器(Ubuntu 12.04.2)。现在我们遇到了一个我以前没见过的奇怪行为,我真的不知道从哪里开始。也许有人能给我暗示。我们有以下简单的表格:id data1 data2 data3(int) (varchar) (int) (int)-------------------------------------1 (empty) 123 4562 (null) 321 6543 abc 555 666(空)表示该字段包含空字符串。(空)表示该字段为空。现在我们使用以下非常简单的查询:SELECT * FROM `table` WHERE `data1` != 'abc';在我们的旧服务器上,查询返回了ids为1和2的行,我猜,这是绝对正确的,因为!='abc'匹配这两个记录集。在我们的新服务器上,查询只返回id为1的记录集。在选择字段中包含空值的记录集突然被查询以某种方式忽略。更清楚的是:我知道可以使用IS NULL,但这将导致检查应用程序中与此情况匹配的所有查询和表。现在的问题是:在旧服务器上,我们是否幸运地发现查询通过返回第1行和第2行的行为与预期一致,或者新服务器通过仅返回第1行的行为是否正确?一般来说:!='abc'应该匹配记录集1和2还是应该只匹配id 1?mysql配置中是否可能有一个控制该行为的设置?我有点受不了。感谢您的帮助!提前谢谢。。。 最佳答案 由于null是一种特殊情况,如果希望包含null值,则应显式指定要包含这些值。从table中选择*其中(data1“abc”或数据为空)The right server behavior, is ignore nulls unless you ask for them...关于mysql - MySQL选择包含空值的字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17097890/ 10-16 07:24