我有mySQL表,并且列中包含null而非null数据。
在运行查询时,我可以看到BLOCKER列具有空值。
mysql> select count(1), BLOCKER from mysql.PRSSTATE group by BLOCKER;
+----------+----------------+
| count(1) | BLOCKER |
+----------+----------------+
| 193403 | |
| 350 | Beta |
| 24 | Build |
如果我发出如下所示的查询,我将count(1)视为零。
mysql> select count(1) from mysql.PRSSTATE where BLOCKER is NULL;
+----------+
| count(1) |
+----------+
| 0 |
+----------+
1 row in set (0.13 sec)
我怀疑它可能具有特殊性质,因为我已将数据从其他系统迁移到此表中。想知道如何解决这个问题。它应该显示为"为空"言。
答案 0 :(得分:3)
BLOCKER
的长度可能为零:
select count(1) from mysql.PRSSTATE where (BLOCKER is NULL or BLOCKER = "");
答案 1 :(得分:2)
这里的问题是您错误地认为BLOCKER为NULL。实际上,您存储空字符串("")而不是NULL值。您应该修改您的查询以匹配NULL和""值:
select count(1) from mysql.PRSSTATE where BLOCKER IS NULL OR BLOCKER = "";
或者修改您的脚本(或用于创建这些记录的任何内容),当您没有BLOCKER列的数据时插入NULL值,或者只是不传递任何内容并确保您的BLOCKER列和< #39; s定义设置为DEFAULT NULL。
如果BLOCKER为NULL,您将从第一个查询中获得以下输出:
+----------+----------------+
| count(1) | BLOCKER |
+----------+----------------+
| 193403 | NULL |
| 350 | Beta |
| 24 | Build |
+----------+----------------+