2013-02-15 70 views
2

我有一個數據庫,其中有很多字符串列。我應該使用NVARCHAR(MAX)還是將字符串限制爲最大值,如NVARCHAR(100)等?我真正想知道的是,如果我將列設置爲NVARCHAR(MAX),並且該列的所有值都爲100個字符或更少,那麼通過將該列設置爲NVARCHAR(100)可以節省空間嗎?關於使用NVARCHAR(MAX)

我知道空間並不是這裏唯一的問題,數據的「驗證」也很重要,但我只是問空間問題。

+1

您應該將列的長度限制爲可能的最大/合理(取決於具體情況)您打算在其中放置的數據的長度,以阻止將不正確的數據放入數據庫。這個限制取決於你。空間不應該是一個考慮因素。 – Ben 2013-02-15 10:46:50

+0

你提出了一個非常有用的觀點 - 我只是想知道空間問題。 – 2013-02-15 10:47:34

回答

2

它不會節省空間,因爲nvarchar字段的大小取決於輸入數據的大小,而不是字段定義。根據documentation

存儲大小,以字節爲單位,是輸入的數據的兩倍的實際長度+ 2個字節

你會設置大小限制的原因是爲了驗證該數據是大小或更小,因爲這就是你的邏輯數據模型所規定的。

5

你知道你不能索引nvarchar(max)類型的列嗎?因此,您無法優化此列上的查詢。沒有大小的影響,一致認爲,但肯定會有潛在的性能影響。

另請注意,在一定大小的列存儲在行外,因此讀取它將會增加額外的perf命中。

如果你擔心在插入時收到錯誤,一般的解決方法可以是:

  1. 驗證客戶端
  2. 修剪串

下面是討論這個的問題更多detail

相關問題