NULL是一種“沒有類型”的值,通常表示“無值”,“未知值”,“缺失值”,“超界”,“不在其中”等,我們在日常運用中很容易和NULL字元串混淆,這裡大緻整理了下NULL值的一些特性,以便能夠正确使用NULL值。
1,建立表時字段時若未添加預設值,則預設為NULL值
2,NULL值和NULL字元串的差別
1)NULL值不區分大小寫,查詢時都顯示為大寫NULL,而NULL字元串則顯示為插入時候的大小寫,查詢的時候根據字元集是否區分大小寫篩選,或者通過語句級的collate或binary指定是否區分大小寫。
2)NULL字元串可以當作普通字元串進行處理,而NULL值的判斷隻有is null和 is not null,見第5點
3,插入資料時若不指定值,如果沒其它預設值,會用預設值NULL
4,當插入大寫NULL字元時,就很難差別NULL是NULL值還是NULL字元串了,這時需要用到NULL值的判斷,NULL值的判斷隻有is NULL和is not NULL
通過肉眼很難差別,這裡通過NULL值的判斷,可以看到id2為NULL值的隻有3行,非NULL值的有7行,而為NULL字元串的有4行
5,SQL裡面對NULL值的處理函數有isnull(expr)(傳回is NULL的邏輯判斷結果)和ifnull(expr1,expr2)(如果expr1 is null則傳回expr2,否則傳回expr1)
6,和NULL值的比較運算和算術運算,結果仍為NULL值,但是<=>運算符時,NULL<=>NULL為真
7,和NULL值的邏輯運算,is NULL運算隻有null is null為真傳回數字1,is not NULL運算隻有 null is not null為假傳回數字0
8,mysql會把單獨的\N(區分大小寫)當作NULL值
9,NULL值和空字元’’不一樣,查詢字段為空字元時,可以用等号,不考慮長度,都顯示為空,但是長度不一樣
10,空字元和其他字元做算術運算時當作0處理,但是當做分母時運算結果為NULL
11,NULL值會被count(字段)函數過濾,但是在count(*)中不會被過濾
12,在group by函數中NULL會當作同一個值放在最最小值前
13,其他一些函數中如果有NULL值,傳回結果為NULL,如: