2012-07-03 91 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个字符),因为这是将列用作索引键的一部分的限制。但我意识到这也是页面原因。 –