創建表時應當設置not null,添加一個預設值0或''去替代null。 sum('field')的坑 若一列的所有值都是null,那麼sum函數的結果不是0,而是null,所以可能會因為值的類型相容問題,出現意料之外的情況。 null值會有NPE問題。 count('field')的坑 有null ...
創建表時應當設置not null,添加一個預設值0或''去替代null。
sum('field')的坑
若一列的所有值都是null,那麼sum函數的結果不是0,而是null,所以可能會因為值的類型相容問題,出現意料之外的情況。
null值會有NPE問題。
count('field')的坑
有null的列,count不會+1。
where('field')的坑
null是沒有設置值的一種狀態,並不是某個值,若用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相關運算的坑
null值與任何數據進行四則運算或者大於小於等於不等於的運算,都返回null,某些場景下,可能不適用。
導入數據的坑
若兩個MySQL環境或配置不一樣,A設備導出的數據,B設備導入,可能會因為null值所在的欄位缺少值從而報錯。
外鍵的坑
在 MySQL 中,如果使用了外鍵約束,並且外鍵列允許 NULL 值,那麼當引用的列中出現 NULL 值時,可能會導致一些意想不到的行為,如無法正確匹配行或者導致級聯更新或刪除的問題。
結果相容性的坑
對於靜態強類型語言,可能類型上會不相容。
對於動態若類型的語言,null,0,false,'',都是false,可能會影響一些邏輯。
對唯一索引的影響
null值會導致數據有多個相同的null值,破壞了唯一性約束。
對索引的影響
有的說null值就不走索引,經過實測,就算全是null值,也顯示的Using index。