當使用整數列時,最好有0或NULL來表示沒有值。例如,如果一個表有一個parent_id字段,並且一個特定的條目沒有父對象,你會使用0還是NULL。我過去總是使用0,這是因爲我來自Java世界(1.5之前)整數總是必須有一個值。我主要問的是表現方面的問題,我並不太擔心哪個是「更正確」的選擇。MySQL整數0對NULL
回答
使用NULL
是優選的,原因有二:
NULL
用來表示該字段沒有價值,這是你想要的模型到底是什麼。- 如果您決定在將來添加一些參照完整性約束條件,則必須使用
NULL
。
0仍然是整數列的有效值。因此,您必須使用NULL並在該列上允許爲空。另外,如果您僅將整數列用於正數,則可以使用-1作爲無值。
在你的PARENT_ID參考示例使用0,直到您確保沒有參考IDS ID爲0
使用NULL爲「沒有價值」實際上就是正確的開始是好的。 0是一個整數的值,因此它有意義。 NULL otoh字面意思是沒有任何東西,所以沒有價值。
性能可能無關緊要,但如果您學習使用NULL正確編碼,則使用NULL可能會更快一些。
任何現實生活中的性能差異在你PARENT_ID例如0是完全有效的,因爲它代表着「根」。在大多數情況下,NULL在邏輯上是「無價值」的更好選擇。
雖然我沒有對性能產生影響。
如果可能,聲明列爲NOT NULL。通過更好地使用索引並消除測試每個值是否爲NULL的開銷,它使SQL操作更快。您還可以節省一些存儲空間,每列一位。如果您真的需要表中的NULL值,請使用它們。只需避免在每列中都允許NULL值的默認設置。
+1。我仍然會爭辯說,''沒有價值'是可能的這個列「是足夠的理由使用NULL。我想在不違反常識的情況下進行基準測試。這句話只是談論你真的,實際上永遠不會以這種方式使用它的專欄,AFAICT。 – 2013-01-30 06:21:48
我覺得0可以用來代替NULL,如果你不實際指望0用作值。
這就是例如你的列是一個外鍵。由於外鍵通常不以0開始,而是以1開始,這意味着您不會期望0被用作值。
然後,您可以使用0表示「否」值狀態。在連接中使用它不會匹配另一個表上的任何列。因此,具有與NULL相同的效果。
但是,如果你有一個列其中的0實際上有一個含義。像例如一個數量字段。除此之外,你還需要表達和清空價值。例如,表示數量尚未輸入。那麼你需要一個NULL。
希望是有道理的。
UNIQUE(id1, id2)
將與空值在另一方面,如果你使用的0不能工作,因爲它允許,例如1, null
兩次
,JOIN atable ON this.extID = atable.ID
聯結將執行(導致沒有行加入),而將空只是被忽略
無論如何,我建議,除非空值從NULL
不同的含義,始終使用,而不是NULL「空值」(如0或空字符串),我也修改查詢,像這樣:JOIN atable ON this.extID = atable.id AND extID > 0
這阻止了執行無用的連接
- 1. MySQL將NULL轉換爲整數0
- 2. mysql null爲0
- 3. Mysql整數默認值0
- 4. Mysql - 計數NULL總是返回0?
- 5. MySQL的:鑄字NULL 0
- 6. 整數從MySQL總是返回0
- 7. 爲什麼`null> = 0 && null <= 0`但不是`null == 0`?
- 8. mysql空連接NULL時切換爲0
- 9. MySQL間隔查詢返回0或NULL
- 10. 用NULL MySQL的乘法列,0行
- 11. 選擇0,如果NULL發現 - MySQL的
- 12. 在mysql中將0替換爲null
- 13. 爲什麼MySQL的返回NULL 1000/0
- 14. 包括NULL結果爲0,在MySQL
- 15. 如何將NULL值視爲0從MySQL
- 16. MySQL查詢顯示,而不是NULL - 0
- 17. 在MySQL中用0替換null
- 18. 如果查詢返回null,count = 0 mysql
- 19. MySQL將0行的SUM轉換爲整數0
- 20. 傳入NULL整數?
- 21. 0 +整數是JS
- 22. 返回整數0
- 23. 獲取計數0而不是NULL MySQL查詢
- 24. MYSQL的行數是NULL,但我需要顯示0
- 25. 爲什麼mySQL索引基數會從> 0更改爲null?
- 26. Javascript對比的問題(null> = 0)
- 27. MYSQL - NULL和(null)
- 28. 將MySQL整數IN參數轉換爲0
- 29. 對整數數組的基本mysql regexp
- 30. 對列和整數的Mysql min函數
如果您不擔心哪個「更正確」,那麼只需從調用數據庫的報表或應用程序中輸出一個硬編碼的零;這比使用任何數據庫要快得多。 – 2015-03-16 19:07:56