2012-07-03 66 views
0

我有型在提交到數據庫之前裁剪NVARCHAR(MAX) - 多長?

summary NVARCHAR(4000) NULL 

之前,我的任何數據添加到表我簽入代碼,並修復它,如果用戶輸入一個字符串,它是使用此代碼數據庫太長的SQL行

if (instanceToCrop.Description != null && instanceToCrop.Description.Length > 4000) instanceToCrop.Description = instanceToCrop.Description.Substring(0, 4000); 

如果我改變我的表從而

ALTER TABLE Timeline 
ALTER COLUMN summary NVARCHAR(MAX) 

我應該代替4000用什麼不變,保持長度低於提交的字符串SQL服務器會拒絕?

+0

您不應該允許用戶從UI端輸入那麼多字符,而不是從數據庫端進行檢查。如果您使用的是.net,則文本框有一個maxlength屬性。 – JonH

+3

Integer.MaxValue –

+0

JonH,同意。 UI檢查比這還少,但我很謹慎,並且還包括檢查數據庫周圍的代碼。 喬爾 - 有趣的是,感謝那 – dumbledad

回答

1

您可以在NVARCHAR(MAX)中存儲的最大字符數爲1,073,741,823或與其非常接近。如果你的用戶可以在你的文本框中輸入這麼多的文本,那麼可能會有一些不是最佳的......他們是在粘貼「聖經」還是所有「指環王」電影的成績單?

我認爲你可以設置一個更實際的限制,但我們不能真正告訴你應該是什麼...... 50,000個字符? 100,000個字符?網絡/數據包原因小於64KB?不知道,這似乎是一個商業決定,而不是技術。

+0

有趣的你應該說 - 國王詹姆斯版是我一直使用的原型長文本之一! – dumbledad

+0

有一件令我困惑的事情是NVARCHAR記錄的4000 max [http://msdn.microsoft.com/en-us/library/ms186939.aspx](http://msdn.microsoft.com/en-us/ library/ms186939.aspx):「n定義了字符串的長度,可以是從1到4,000的值」。如果出於商業原因,我需要最大長度爲16,000個字符,這是否意味着我必須在數據庫中使用NVARCHAR(MAX)? – dumbledad

+1

@dumbledad語法圖表明您可以使用'n |最大' - '|'='或'。當你使用數字值('n')時,它必須在1到4000之間。如果你需要超過4000個字符,你可以使用'max'而不是數字值,這允許2GB的數據(略多於10億字符)。就個人而言,我認爲非最大值和最大值之間的截止值應爲900個字節(nvarchar爲450個字符),因爲這是將列用作索引鍵的一部分的限制。但我意識到這也是頁面原因。 –

相關問題