SQL Server中varchar(MAX)的大小限制

时间:2014-07-27 17:23:27

标签: c# sql-server linq-to-sql

我有一行包含一个定义为varchar(MAX)的字段。我对该字段的限制感到困惑:在某些地方,我读到varchar(MAX)的大小限制为8K,而在其他地方,似乎限制为2GB。

我有一个我要保存到数据库的字符串;它大约220K。我使用linq-to-sql,当写查询提交给数据库时,写入的行没有生成任何异常。但是,当我在SSMS中打开数据库表时,应包含长字符串的单元格为空。为什么这样,我如何利用我读到的2GB限制?

这是linq-to-sql模型中的属性:

enter image description here

感谢。

1 个答案:

答案 0 :(得分:4)

所有MAX数据类型 - VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX) - 限制为2 GB。你不需要做什么特别的事情。如果不指定MAX,则VARCHAR和VARBINARY的限制为8000,NVARCHAR的限制为4000(由于NVARCHAR为双字节)。如果您根本没有看到任何数据,那么还会发生其他事情。

您确定该列是否在INSERT语句中?如果您提交的测试数据只有20个字符,是否会写入?如果您想查看Linq实际提交的SQL,请尝试运行SQL事件探查器并查看SQL Statement: Statement Ended事件,我相信。

另外,当你说“长字符串为空”时,你的意思是一个实际的空字符串,还是你的意思是NULL?如果它不是NULL,您还可以将该字段包装在LEN()函数中,以查看开头是否有返回空白,将任何非空白字符推出视图。含义,SELECT LEN(stringField), * FROM Table。另一件要尝试的是使用“结果到文本”而不​​是“结果到网格”(这是一个查询选项)。

编辑:
看到该字段标记为NOT NULL,您确定要正确设置对象的ClientFileJS属性吗?空字符串是否可能是由于该属性被初始化为string ClientFileJS = "";并且永远不会更新?