varchar(max)
。据我了解,这应该存储2^31 - 1
个字符,但是当我输入超过8000个字符的内容时,它将切断其余字符。我已经验证了所有数据都包含在我的更新语句中,并且查询看起来还不错
当我在网站上显示数据时,以及当我使用SSMS进行
select content from table
时,数据均被截断。/>
select DATALENGTH (content) from table
返回为8000。我使用以下数据设置数据:
update table set content = 'my long content' where id = 1
。内容中确实包含很多HTML,但是我看不到这会引起问题。我唯一能看到的是我将所有"
替换为''
,因为这是用户输入的内容(不记得为什么我现在这样做了。)我确实设法将内容通过删除内容中的所有单引号正确输入,所以我认为我的数据而不是数据库发生了奇怪的事情。
我应该对查询做一些特殊的事情以使用
varchar(max)
字段吗?使用:SQL Server 2008(10.50)64位。
#1 楼
如果要通过字符串连接构建字符串,请确保在所有组件字符串都不超过8,000个字符的情况下,将字符串文字之一明确转换为varchar(max)
。否则,它将被视为非max数据类型,并且连接将被截断为8,000个字节。在达到
varchar(max)
文字之前,如果合并长度超过8,000,则将其强制转换为varchar(max)
,以避免截断。
评论
在前两个示例上打印仅打印8000个字符,而分别遗漏最后5个和3个字符“ AAABC”和“ ABC”。
– Anand Gautam
17年8月25日在12:57
@anand。我的回答中没有PRINT。那截短的文字。
–马丁·史密斯
17年8月25日在13:39
我有一个用字符串编写的查询过程,例如。声明@ str varchar(MAX)='select * from Table1 ...',此字符串输入8193个字符,而在打印@ str“ print(@ str)”时,它仅打印8000个字符,如果执行,它将给出偏离路线的错误。
– Anand Gautam
17年8月25日在18:10
@AnandGautam提出有关此问题的新问题,并提供可重现此问题的完整代码。
–马丁·史密斯
17年8月25日在18:16
@AnandGautam我想这是问题吗? dba.stackexchange.com/q/184377/3690在这种情况下,PRINT一直将其截断。
–马丁·史密斯
17年8月26日在16:29