最近開始給項(xiàng)目設(shè)計(jì)數(shù)據(jù)庫,遇到一個可能很多人都會遇到的問題,就是設(shè)定某一個字段的默認(rèn)值的時候,是設(shè)定null,“”,還是empty string呢?
首先我們從數(shù)據(jù)類型來分析這個問題:
我是phper,如果從PHP語言來看,要判斷是不是空,用empty()這個函數(shù),那么null和empty string 還有“”,結(jié)果都是一樣的,但是如果從Java,C#這些更高級點(diǎn)的語言來判斷,null 和 empty string還是有區(qū)別。null在這些高級語言里面就是什么都是空,但是empty string雖然是空,但是是字符串string類型。
然后我們從MySQL本身來看:
[plain] view plain copy
1:空值('')是不占用空間的
2: MySQL中的NULL其實(shí)是占用空間的。官方文檔說明:
“NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”
所以 mysql設(shè)計(jì)表時 建議不要用default NULL
string類型的可以default ''或者emptystring
int類型的可以default 0
另外一點(diǎn),從不同的項(xiàng)目開發(fā)去分析這個問題:
以前單純做web網(wǎng)頁端,對這個默認(rèn)值設(shè)定問題選用null 還是empty string。但是后來在另外一個團(tuán)隊(duì)開發(fā)app的時候,這個null和empty string的問題就尤為突出,因?yàn)槲沂怯?a target="_blank" rel="nofollow">php做接口開發(fā),如果一旦出現(xiàn)null的數(shù)據(jù)類型,沒有處理直接返回去前端,那么無論是iOS還是Android端,如果沒有處理好這個空的判斷,要么就直接輸出null,要么程序直接報(bào)錯。所有建議設(shè)計(jì)數(shù)據(jù)庫的時候默認(rèn)值盡量少用null.