在指标的编制过程中,发现死活过滤不了空白字符串,SQL语句如下:
SELECT *
from alarm
where DATE_FORMAT(update_time, '%w') = 0
and processer is not null
进行SQL代码调试,发现启用“processer is not null”判断语句与没有启用,效果完全相同,这是为什么呢?
诊断表的设计语句,发现声明如下:
ALTER TABLE `alarm`
MODIFY COLUMN `processer` varchar(512)
CHARACTER SET utf8 COLLATE utf8_general_ci
NULL DEFAULT ''
看到最后一句SQL,恍然大悟,默认值为空白字符串,当然满足“is not null”的判断条件了。
将指标的过滤条件加上空白字符串的判断,结果终于工作正常了,如下:
SELECT *
from alarm
where DATE_FORMAT(update_time, '%w') = 0
and processer is not null
-- 拒绝空白字符串 --
and LENGTH(processer) > 0
结论
在MYSQL中,空白字符串与空值(NULL)是两个完全不同的概念,需要仔细区分。