除非你有一個很特別的原因去使用 null 值,你應該總是讓你的欄位保持 not null。這看起來好像有點爭議,請往下看。
1、首先,我們要搞清楚空值("") 和 “null” 的概念:
1)空值是不佔用空間的
2)mysql中的null其實是佔用空間的
所謂的null就是什麼都沒有,連\0都沒有,\0在字串中是結束符,但是在實體記憶體是佔空間的,等於一個位元組,而null就是連這一個位元組都沒有。
2、其次,在資料庫裡是嚴格區分的,任何數跟null進行運算都是null, 判斷值是否等於null,不能簡單用=,而要用is null關鍵字。
3、資料庫的欄位col1設為not null, 僅僅說明該欄位不能為null, 也就是說只有在
insertinto
table1(col1) values(null);
這種情況下資料庫會報錯,而
insertinto
table1(col1) values(‘’);
不會報錯。
(如果欄位是自增id,第一句不會報錯,這不能說明是可以為null,而是 資料庫系統會根據id設的預設值填充,或者如果是自增欄位就自動加一等預設操作。)
4、含有空值的列很難進行查詢優化,而且對錶索引時不會儲存null值的,所以如果索引的欄位可以為null,索引的效率會下降很多。因為它們使得索引、索引的統計資訊以及比較運算更加複雜。你應該用0、一個特殊的值或者一個空串代替空值。
5、聯表查詢的時候,例如left join table2,若沒有記錄,則查詢出的table2欄位都是null。假如table2有些欄位本身可以是null,那麼除非把table2中not null的欄位查出來,否則就難以區分到底是沒有關聯記錄還是其他情況
8 3 mysql 欄位屬性
unsigned 無符號 主要用於整型和浮點型別,使用無符號。即,沒有前面面的 負號 儲存位數更長。tinyint整型的取值區間為,128 127。而使用無符號後可儲存0 255個長度。建立時在整型或浮點欄位語句後接上 unsigned zerofill 0填充 0 不是空格 可以用來真補輸出的值。...