MySQL列具有空值,但"为空"不管用

时间:2016-04-01 01:27:36

标签: mysql sql

我有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)

我怀疑它可能具有特殊性质,因为我已将数据从其他系统迁移到此表中。想知道如何解决这个问题。它应该显示为"为空"言。

2 个答案:

答案 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          | 
+----------+----------------+