与mysql IS NULL运算符的行为不一致

时间:2014-04-08 22:20:13

标签: php mysql zend-framework

我有一个使用Zend框架构建的网站。

此查询:

$select
  ->from(table, new Zend_Db_Expr('COUNT(1) AS zend_paginator_row_count'))
  ->where("`resource_type` IS NULL)

在我的本地服务器中返回一个填充的Zend_Db_Select对象,但不在我的托管服务器中。 而不是那样,我需要将查询修改为:

  $select
  ->from(table, new Zend_Db_Expr('COUNT(1) AS zend_paginator_row_count'))
  ->where("`resource_type` = '')

为什么会发生这种情况有一个原因或解释?显然,数据在两个服务器中以相同的方式插入。

谢谢, 卢卡斯。

1 个答案:

答案 0 :(得分:2)

毕竟,数据以不同的方式插入,或者表定义不同。在开发服务器中,您的字段可能是可空的和/或没有默认值。在托管服务器中,字段不同。它可能不可为空或默认值为'',这会导致新记录自动包含空字符串而不是NULL

请注意,在Oracle NULL''中是相同的,但在MySQL中它们是两个不同的东西。因此,在您的情况下,不一致性不在运算符中,而是在数据中。