Navicat 部落格

比較關聯式資料庫中的 Null、零和空白字串的語義 2020 年 9 月 8 日,由 Robert Gravelle 撰寫

通常,資料庫開發人員和管理員經常在他們的資料庫資料表中交換使用 Null、零和空白字串。不幸的是,因為 Null、零和空白字串在關聯式資料庫(RDBMS)中分別代表不同的意思。因此,錯誤地使用這些值或選擇錯誤的值可能會對依賴該值的資料庫和應用程式作業產生巨大影響。在今天的文章中,我們將探討如何在資料庫設計和一般使用中更好地運用 Null、零和空白字串。

什麼是 Null?

Null 值在關聯式資料庫和程式設計語言中都有悠久的歷史。它被設計為一種特殊的值,表示刻意不存在任何值。這樣,可以將其指派給任何可為 null的欄。若要將欄指定為可為 null,只需包含 NULL 關鍵字,或將其省略,因為預設情況下欄是可為 null

CREATE TABLE table_name 
(  
  column1 datatype [ NULL | NOT NULL ], 
  column2 datatype [ NULL | NOT NULL ], 
  ... 
); 

Navicat 的資料表設計器大幅簡化資料表的建立。在 Navicat 中,若要指定一欄不能包含 NULL 值,請勾選「不是 null」核取方塊:

Not_null_column (148K)

在資料表網格檢視中,NULL 值是以 (Null) 表示:

customers_table (202K)

就語義而言,缺少的值告訴我們不知道它是什麼。簡而言之,Null 可能表示「???」。稍後我們將看到,零或空白字串都不是這種情況。

零值

零(0)值是一個實數,在世界各地的其他術語都有這個含意,包括 nought(英國)、naught(美國)、nil、zilch、zip、nada、scratch 和 goose egg。它的值可以被認為是「沒有」。假設我們有一個信用額度欄。在這種情況下,值為 0.00 表示客戶沒有信用額度。如果該欄可為 null,則 NULL 值表示我們不知道客戶的信用額度是多少。在第一個例子中,我們知道客戶的信用額度是零。

在 Navicat 中,我們可以使用「預設」下拉式清單設定欄的預設值:

creditLimit_column (26K)

請注意,NULL 是第一個選項。

空白字串的神秘面紗

與零非常相似,空白字串("")與 NULL 值的不同之處在於,前者明確表示該值被設定為空白,而 NULL 則表示未提供該值或該值未知。例如,假設我們有一個儲存手機號碼的欄。空白值表示此人沒有手機,而 NULL 表示此人未提供電話號碼。這是兩種截然不同的解釋!

總結

理解 Null、零和空白字串的語義對於資料庫開發人員和管理員來說非常重要,因為不正確地使用它們或選擇錯誤的值可能會對與其互動的資料庫和應用程式作業產生巨大影響。

為此,Navicat 資料庫開發和管理用戶端為了方便你使用 Null、零和空白字串,提供「預設」下拉式清單並在資料庫資料表中明確表示 Null。

Navicat 文章
頻道記錄
分享
部落格封存檔