2011-08-03 22 views
2

MSDN has this to say關於這個問題:nvarchar(4001)?

nvarchar的[(N | MAX)]

可變長度Unicode字符數據。 ncan是一個從1到4,000的值。 max表示最大存儲大小爲2^31-1字節。存儲大小(以字節爲單位)是輸入的字符數+ 2字節的兩倍。輸入的數據長度可以是0個字符。 nvarchar的ISO同義詞是國家字符變化和國家字符變化。

這讓我感到困惑。我可以將列定義爲1 - 4000長,或2147483647長,但沒有任何內容?我的理解是否正確?爲什麼我不能明確中間值?

回答

4

NVARCHAR(MAX)涵蓋一切(不是只是 20億字符)。如果您需要超過4000個字符,則數據肯定會脫離頁面,因此就行爲而言,如果您使用了4,001個字符,10,000個字符或10,000,000個字符,則無關緊要。它只佔用你需要的空間,所以不要以爲你在浪費(2 billion characters - the length of your actual string)

+0

+1 - 他也應該知道'MAX'意味着沒有索引或約束。 – JNK

+1

那麼,大於450的任何東西都會因索引的900byte限制而導致問題。 – spender

+0

@spender,只有當列需要作爲索引中的關鍵字列參與時才相關。你的陳述似乎意味着沒有人應該聲明一個'NVARCHAR(> 450)'? –

1

由於4000個字符或更少的字符在存儲方面具有一種行爲,MAX在存儲方面具有其他行爲。你真的不想開始強制字符串長度計算對於1M字符長的東西嗎?我目前的理解是,最多可將4000個字符存儲在表格中,並將MAX存儲在表格外。

另外NVARCHAR(MAX)和VARCHAR(MAX)是文本和ntext的替代品。

+0

僅供參考,您可以明確指定MAX在可能的情況下存儲在行內。 –

2

Max將接受4001和1073741823之間的值(記住存儲大小約爲實際字符串的長度的兩倍)。

限制基本上是任何超過4000個字符必須是MAX