2010-07-02 70 views
1

我有一個數據庫,其中包含一個包含與請求關聯的許可證號碼的字段。許可證號碼是13位數字,但可能不會簽發許可證。Char vs Varchar當不總是填充

就這樣說,我目前有一個字段定義爲char(13),允許NULL。我被要求將它改爲varchar(13),因爲char的,如果爲NULL,仍然使用全長。

這是可取的嗎?除空間使用外,還有其他優點或缺點嗎?

我知道在一個理想的關​​繫系統中,許可證號將被存儲在另一個相關的表中以避免使用NULL,但事實就是如此。

回答

1

那麼,如果你不必使用足夠的空間,那麼你可以在內存中放置更多的頁面。如果你能做到這一點,那麼你的系統將運行得更快。這可能看起來微不足道,但我最近調整了客戶端表上的數據類型,將讀取量減少了25%,CPU減少了大約20%。

至於哪個更容易處理,大衛斯特拉頓提到的好處值得注意。我討厭在字符串構建中使用修剪功能。

0

最大的優點(一般來說,不一定是你的特定情況)我知道的是,在代碼中,如果你使用varchar,你不必在每次顯示時都使用Trim函數。在使用名字字段和姓氏字段並將它們組合成全名時,我遇到了很多問題。這只是令人討厭,並使代碼不易讀。

1

如果字段應該總是正好13個字符,那麼我可能會將其保留爲CHAR(13)。

此外,從BOL一個有趣的註釋:

如果SET ANSI_PADDING爲OFF時要麼 CREATE TABLE或ALTER TABLE是 執行時,一個字符列,它是 定義爲NULL時爲varchar處理。

編輯:您希望該字段爲NULL的頻率如何?如果95%的時間內都會有人使用,那麼做出這個改變是不值得的。