建立表時應當設定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。