創(chuàng)建表時應(yīng)當(dāng)設(shè)置not null,添加一個默認(rèn)值0或''去替代null菜职。
sum('field')的坑
若一列的所有值都是null邦鲫,那么sum函數(shù)的結(jié)果不是0例获,而是null低矮,所以可能會因?yàn)橹档念愋图嫒輪栴}印叁,出現(xiàn)意料之外的情況。
null值會有NPE問題军掂。
count('field')的坑
有null的列喉钢,count不會+1。
where('field')的坑
null是沒有設(shè)置值的一種狀態(tài)良姆,并不是某個值,若用where field = null, where field = '', where field = false, where field = true
幔戏,都無法匹配玛追。
需要使用where field is null,where field <=> null
來匹配闲延。
group by('field')的坑
null值會被自動歸類為一類痊剖,某些場景下,可能不適用垒玲。
order by('field')的坑
null值會被視為最小值陆馁,放在0的前方,某些場景下合愈,可能不適用叮贩。
distinct('field')的坑
有null的值击狮,也會被去重,某些場景下益老,可能不適用彪蓬。
null相關(guān)運(yùn)算的坑
null值與任何數(shù)據(jù)進(jìn)行四則運(yùn)算或者大于小于等于不等于的運(yùn)算,都返回null捺萌,某些場景下档冬,可能不適用。
導(dǎo)入數(shù)據(jù)的坑
若兩個MySQL環(huán)境或配置不一樣桃纯,A設(shè)備導(dǎo)出的數(shù)據(jù)酷誓,B設(shè)備導(dǎo)入,可能會因?yàn)閚ull值所在的字段缺少值從而報錯态坦。
外鍵的坑
在 MySQL 中盐数,如果使用了外鍵約束,并且外鍵列允許 NULL 值驮配,那么當(dāng)引用的列中出現(xiàn) NULL 值時娘扩,可能會導(dǎo)致一些意想不到的行為,如無法正確匹配行或者導(dǎo)致級聯(lián)更新或刪除的問題壮锻。
結(jié)果兼容性的坑
對于靜態(tài)強(qiáng)類型語言琐旁,可能類型上會不兼容。
對于動態(tài)若類型的語言猜绣,null灰殴,0,false掰邢,''牺陶,都是false,可能會影響一些邏輯辣之。
對唯一索引的影響
null值會導(dǎo)致數(shù)據(jù)有多個相同的null值掰伸,破壞了唯一性約束。
對索引的影響
有的說null值就不走索引怀估,經(jīng)過實(shí)測狮鸭,就算全是null值,也顯示的Using index多搀。