MySQL欄位屬性應該儘量設定為NOT NULL

2023-01-28 00:05:55 字數 879 閱讀 8549

除非你有一個很特別的原因去使用 null 值,你應該總是讓你的欄位保持 not null。這看起來好像有點爭議,請往下看。

1、首先,我們要搞清楚空值("") 和 “null” 的概念:

1)空值是不佔用空間的

2)mysql中的null其實是佔用空間的

所謂的null就是什麼都沒有,連\0都沒有,\0在字串中是結束符,但是在實體記憶體是佔空間的,等於一個位元組,而null就是連這一個位元組都沒有。

2、其次,在資料庫裡是嚴格區分的,任何數跟null進行運算都是null, 判斷值是否等於null,不能簡單用=,而要用is null關鍵字。

3、資料庫的欄位col1設為not null, 僅僅說明該欄位不能為null, 也就是說只有在

insert

into

table1(col1) values(null);

這種情況下資料庫會報錯,而

insert

into

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 不是空格 可以用來真補輸出的值。...