我有一行包含定义为的字段varchar(MAX)
。我对字段的限制感到困惑:在某些地方,我读到varchar(MAX)的大小限制为8K,而在其他地方,似乎限制为2GB。
我有一个要保存到数据库的字符串;大约是22万 我正在使用linq-to-sql,当写查询提交到数据库时,该行将被写入而不会生成任何异常。但是,当我在SSMS中打开数据库表时,应包含长字符串的单元格为空。为什么会这样?如何利用我所读到的2GB限制?
这是linq-to-sql模型中的属性:
谢谢。
所有MAX数据类型-VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)-限制为2 GB。您不需要做任何特别的事情。如果不指定MAX
,则VARCHAR和VARBINARY的限制为8000,NVARCHAR的限制为4000(由于NVARCHAR为双字节)。如果您根本看不到任何数据,则说明正在发生其他情况。
您确定该列甚至在INSERT语句中吗?如果您仅提交20个字符的测试数据,该数据会被写入吗?如果您想查看Linq实际提交了什么SQL,请尝试运行SQL Profiler并查看SQL Statement: Statement Ended
事件。
另外,当您说“长字符串为空”时,是指实际的空字符串还是NULL?如果它不是NULL,则还可以将字段包装在LEN()函数中,以查看开头是否有空白的返回值将所有非空白字符推出视野。意思是SELECT LEN(stringField), * FROM Table
。另一件事是尝试使用“结果到文本”而不是“结果到网格”(这是一个查询选项)。
编辑:
看到该字段被标记为NOT NULL,您确定要ClientFileJS
正确设置对象的属性吗?空字符串是否可能是由于该属性被初始化为string ClientFileJS = "";
并且从未更新过?