我有210個文本列的表。包含大量文本列的表格。我應該使用nvarchar還是文本?
列包含一種評論,並不總是填充。
什麼是更好的解決方案:NVARCHAR(2000)或TEXT?
如果我選擇NVARCHAR,並且我希望(將來)將字符數增加到NVARCHAR(8000),這會影響行的物理大小嗎?
我有210個文本列的表。包含大量文本列的表格。我應該使用nvarchar還是文本?
列包含一種評論,並不總是填充。
什麼是更好的解決方案:NVARCHAR(2000)或TEXT?
如果我選擇NVARCHAR,並且我希望(將來)將字符數增加到NVARCHAR(8000),這會影響行的物理大小嗎?
文本類型棄用:
的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
讓我們先從一個事實,即text
,ntext
和image
都已過時。
According to MSDN:
的ntext,文本和圖像數據類型將在Microsoft SQL Server的未來版本中刪除。避免在新的開發工作中使用這些數據類型,並計劃修改當前正在使用它們的應用程序。改爲使用nvarchar(max),varchar(max)和varbinary(max)。
現在,讓我們處理的事實,自2005年以來的版本,你可以指定max
作爲列的長度,有效地消除了
text
,ntext
和image
的需求 - 這些替代
varchar(max)
,nvarchar(max)
和varbinary(max)
分別。
至於存儲大小:
爲varchar
和varbinary
,存儲大小爲輸入+ 2個字節的數據的實際長度。
for nvarchar
,>以字節爲單位的存儲容量是輸入數據的實際長度+ 2個字節的兩倍。
所有這些信息都可以在我已經鏈接到的MSDN頁面中找到。
請勿使用TEXT
,已棄用!
使用NVARCHAR
,如果你期望國際數據(特殊字符),並且你的數據庫的大小不重要。
使用VARCHAR
或NVARCHAR
存儲對行內實際字符串的引用。沒問題,從一開始就定義VARCHAR(MAX)
或NVARCHAR(MAX)
。它不會佔用更多的地方,而不是從少量開始。
會有多少行?你的列的預期百分比是多少?未來的結構會改變嗎?這些值如何使用?你會過濾它們嗎?搜索他們?搜索文本部分?
你看,答案是不容易:-)
你應該閱讀有關稀疏列(非常好,如果你有一高「不裝」速度),甚至一個XML列
文本數據類型將被棄用, https://msdn.microsoft.com/en-us/library/ms143729.aspx 爲什麼不是varchar類型 –
由於@NeerajPrasadSharma提到的文字,ntext和圖片將被棄用。改用'nvarchar(MAX)'。 – insilenzio