使用MySQL检查空字段

时间:2010-02-24 15:13:53

标签: php sql mysql null

我已经编写了一个查询来检查具有特定条件的用户,其中一个是他们有电子邮件地址。

我们的网站将允许用户拥有或不拥有电子邮件地址。

$aUsers=$this->readToArray('
 SELECT `userID` 
 FROM `users` 
 WHERE `userID` 
 IN(SELECT `userID`
         FROM `users_indvSettings`
  WHERE `indvSettingID`=5 AND `optionID`='.$time.')
  AND `email`!=""
 ');

这是检查SQL中空字段的最佳方法吗?我刚刚尝试了“IS NOT NULL”,这仍然返回了用户记录而没有他们的电子邮件地址。

上面的查询有效,但出于好奇,我想知道我是否采用了正确的方法。

7 个答案:

答案 0 :(得分:259)

空字段可以是空字符串,也可以是NULL

要处理两者,请使用:

email > ''

如果您的表中有大量空邮件记录(两种类型),则可以从range访问权限中受益。

答案 1 :(得分:35)

是的,你在做什么是正确的。您正在检查以确保电子邮件字段不是空字符串。 NULL表示缺少数据。空字符串""是一个长度为0的空字符串。

您也可以添加空检查

AND (email != "" OR email IS NOT NULL)

答案 2 :(得分:9)

您可以使用

IFNULL(email, '') > ''

答案 3 :(得分:2)

这将有效,但仍有可能返回空记录。虽然您可能在插入记录时将电子邮件地址设置为长度为零的字符串,但您仍可能希望处理以某种方式进入系统的NULL电子邮件地址的情况。

     $aUsers=$this->readToArray('
     SELECT `userID` 
     FROM `users` 
     WHERE `userID` 
     IN(SELECT `userID`
               FROM `users_indvSettings`
               WHERE `indvSettingID`=5 AND `optionID`='.$time.')
     AND `email` != "" AND `email` IS NOT NULL
     ');

答案 4 :(得分:1)

空字符串(email!=“”)和NULL之间存在差异。 NULL为null,空字符串为。

答案 5 :(得分:0)

如果要查找非NULL的所有记录,并且为空或具有任意数量的空格,则可以使用:

LIKE '%\ '

确保反斜杠后面有空格。更多信息:http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

答案 6 :(得分:-2)

检查此代码是否存在问题:

numberOfRowsInSection