mysql - 【null、0、空字符串】區別


 

-- https://my.oschina.net/u/3160411/blog/1594052

創建表tb_test 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'

--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比較返回的都是NULL null、空字符串、字符串0、數字0與null進行or運算返回null 上述問題使用符合表達式ISNULL(`value` or `value`=null)可以分解為 value='0' or value='' or ISNULL(value) 
示例: u.age = '' or ISNULL(TRIM(u.age))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM