建立表tb_testsql
CREATE TABLE `tb_test` ( `name` varchar(255) DEFAULT NULL, `value` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入幾條數據數據庫
INSERT into tb_test VALUES ('null',NULL),('empty',''),('0','0'),('1','1'),('2','2');
問題:查詢出value字段爲null,空字符串,字符串'0'和特定值'1'code
--MySQL數據庫版本 SELECT version() 5.6.21-log SELECT @@version 5.6.21-log -- SELECT * FROM tb_test WHERE `value`=1 or ISNULL(`value` or `value`=null); --null,empty,0,1 SELECT * FROM tb_test WHERE `value`='1' or ISNULL(`value` or `value`=null);--null,empty,0,1 SELECT * FROM tb_test WHERE `value`=1;--1 SELECT * FROM tb_test WHERE `value`='1';--1 SELECT * FROM tb_test WHERE ISNULL(`value` or `value`=null); --null,empty,0 SELECT * FROM tb_test WHERE ISNULL(`value`); --null SELECT * FROM tb_test WHERE ISNULL(`value`=null); --null,empty,0,1,2 SELECT * FROM tb_test WHERE `value`=NULL; --這種方式獲取到一條記錄,全部字段都爲null SELECT '0'=NULL; --null SELECT '1'=NULL; --null SELECT ''=NULL; --null SELECT 0=NULL; --null SELECT 1=NULL; --null SELECT NULL=NULL; --null SELECT (NULL or NULL=NULL); --null SELECT ('' or '' =NULL); --null SELECT ('0' or '0'=NULL); --null SELECT ('1' or '1'=NULL); --1 SELECT ('2' or '2'=NULL); --1
總結:= ,!=不能用來判斷一個字段是否爲空,應該用ISNULL()字符串
任何值使用=與NULL比較返回的都是NULLio
null、空字符串、字符串0、數字0與null進行or運算返回nullclass
上述問題使用符合表達式ISNULL(`value` or `value`=null)能夠分解爲test
value='0' or value='' or ISNULL(value)總結