2011-09-07 76 views
2
NULL
$sql = "SELECT * FROM orders WHERE order_number>=$lower AND order_number<=$upper"; 

我最近迁移服务器和on the previous server this statement included ALL records between $upper and $lower.MYSQL包括查询

新的服务器excludes the NULL records between $upper and $lower

不完整的订单连续保存,无order_number(s);和一个NULL值。

我假设在MYSQL.conf file中有一个设置。或者我正在使用不再支持在查询中自动包含NULL值的不同版本的MYSQL。

+0

其中'MySQL版本号? –

+2

不能说为什么行为改变了(我很惊讶任何版本的MySQL都可以用这个查询返回NULL),但是你看到的新行为是正确的,旧行为是错误的。 –

+0

解决方案 - 确保列不为空 – ajreal

回答

4

我不知道为什么旧服务器包含空值,因为这会违反有关如何与空值进行比较的基本规则。如果你想要空值,你的查询应该是这样的:

Select ... 
From orders 
Where (order_number >= $lower And order_number <= $upper) 
    Or order_number Is Null 
+0

谢谢。 “或order_number为Null”返回数据库中的所有NULL值。我想限制它在值之间的空记录。 – Jeff

+0

@Jeff - 将结果限制为“值之间的空行”是什么意思? null order_number不是“之间”的任何东西。 – Thomas

+0

@Jeff - 换一种说法,如果order_number为null,那么如何确定具有null order_number的给定行是否应该出现在结果集中?请记住,表是*无序*行集合的集合。因此,除非你有专门捕获这些信息的列,否则没有入口序列的概念。如果是这种情况,那么我们需要知道如何确定哪些行应该出现,如果order_number为空。 – Thomas