組織中的數據庫開發標準聲明varchar字段不應允許空值。他們應該有一個空字符串(「」)的默認值。我知道這使得查詢和連接更容易,但今天,我的一位同事質疑我爲什麼該標準只存在於varchar類型而不是其他數據類型(int,datetime等)。我想知道其他人是否認爲這是一個有效的,可辯護的標準,或者如果varchar應該被視爲與其他數據類型的字段相同?Varchar列:可爲空或不可爲
我相信這個標準是適用於以下原因:
我相信,一個空字符串和空值,雖然在技術上有所不同,在概念上是相同的。一個空的零長度字符串是一個不存在的字符串。它沒有價值。但是,數值0與NULL不同。
例如,如果名爲OutstandingBalance的字段值爲0,則表示剩餘的金額爲0.00美元。但是,如果相同的字段爲NULL,那意味着值是未知的。另一方面,名爲CustomerName且字段值爲「」的字段與NULL的值基本相同,因爲兩者都表示名稱不存在。
我在某處讀到一個空字符串與NULL的類比是空白CD與無CD的比較。不過,我認爲這是一個錯誤的比喻,因爲空白CD仍然存在,並且仍然有物理數據空間,沒有任何有意義的數據寫入它。基本上,我相信一張空白CD相當於一串空格(「」),而不是一個空字符串。因此,我相信一個空格字符串是一個與NULL分開的實際值,但是空字符串在概念上等同於NULL。
請讓我知道,如果我對變長字符串的信仰是有效的,或者請賜教,如果他們不是。我已經閱讀了幾篇關於這個主題的博客/論點,但是仍然沒有看到NULL和空字符串之間真正的概念區別。
+1:業務規則驅動列可選性,而不是數據類型。此外,使用NULL與零長度字符串不會節省空間:http://vampirebasic.blogspot.com/2009/01/sql-server-null-varchar-vs-empty.html – 2010-06-08 20:06:55