2015-08-27 92 views
0

我有210個文本列的表。包含大量文本列的表格。我應該使用nvarchar還是文本?

列包含一種評論,並不總是填充。

什麼是更好的解決方案:NVARCHAR(2000)或TEXT?

如果我選擇NVARCHAR,並且我希望(將來)將字符數增加到NVARCHAR(8000),這會影響行的物理大小嗎?

+1

文本數據類型將被棄用, https://msdn.microsoft.com/en-us/library/ms143729.aspx 爲什麼不是varchar類型 –

+1

由於@NeerajPrasadSharma提到的文字,ntext和圖片將被棄用。改用'nvarchar(MAX)'。 – insilenzio

回答

2

文本類型棄用:

的ntext,文本和圖像數據類型將在Microsoft SQL Server的未來版本中刪除。避免在新的開發工作中使用這些數據類型,並計劃修改當前正在使用它們的應用程序。改爲使用nvarchar(max),varchar(max)和varbinary(max)。

請參閱MSDN:ntext, text, and image

因此,你應該使用VARCHAR(X)或nvarchar(x)如果你需要的Unicode。 您必須選擇足夠大的尺寸才能存儲或使用varchar(max)。 此外,每列不需要設置相似的大小。

可變長度類型的物理大小取決於您在其中存儲的內容。如果稍後決定將大小從100更改爲1000,則長度爲50個字符的字符串仍將佔用相同的字節數。但是,200個字符的字符串只適用於(n)varchar(1000)或至少varchar(200)。

如果你有很多空值,你應該考慮使用SPARSE選項。 此MSDN鏈接提供了有關SPARSE列上的潛在收益的更多詳細信息和數據。您可以預期在包含60%空值的varchar列中有40%。 Use Sparse Columns

2

讓我們先從一個事實,即textntextimage都已過時。
According to MSDN:

的ntext,文本和圖像數據類型將在Microsoft SQL Server的未來版本中刪除。避免在新的開發工作中使用這些數據類型,並計劃修改當前正在使用它們的應用程序。改爲使用nvarchar(max),varchar(max)和varbinary(max)。

現在,讓我們處理的事實,自2005年以來的版本,你可以指定max作爲列的長度,有效地消除了
textntextimage的需求 - 這些替代
varchar(max)nvarchar(max)varbinary(max)分別。

至於存儲大小:
varcharvarbinary,存儲大小爲輸入+ 2個字節的數據的實際長度。

for nvarchar,>以字節爲單位的存儲容量是輸入數據的實際長度+ 2個字節的兩倍。

所有這些信息都可以在我已經鏈接到的MSDN頁面中找到。

1

請勿使用TEXT,已棄用!

使用NVARCHAR,如果你期望國際數據(特殊字符),並且你的數據庫的大小不重要。

使用VARCHARNVARCHAR存儲對行內實際字符串的引用。沒問題,從一開始就定義VARCHAR(MAX)NVARCHAR(MAX)。它不會佔用更多的地方,而不是從少量開始。

會有多少行?你的列的預期百分比是多少?未來的結構會改變嗎?這些值如何使用?你會過濾它們嗎?搜索他們?搜索文本部分?

你看,答案是不容易:-)

你應該閱讀有關稀疏列(非常好,如果你有一高「不裝」速度),甚至一個XML列

相關問題