日期:2014-05-18  浏览次数:20786 次

关于varchar(max)的长度
F1帮助中的说明:最大说明符增强了 varchar、nvarchar 和 varbinary 数据类型的存储能力。varchar(max)、nvarchar(max) 和 varbinary(max) 统称为大值数据类型。您可以使用大值数据类型来存储最大为 2^31-1 个字节的数据。


重要提示: 
请使用 varchar(max)、nvarchar(max) 和 varbinary(max) 数据类型,而不要使用 text、ntext 和 image 数据类型。 

问题如下:
现在有一个字段,数据类型是varchar(max),但存储到一定的数据量,自动被截取了,导致数据不完整!

SQL code
SELECT DATALENGTH(paperInfo) FROM dbo.Paper


--------------------
181708
170692
1492
5504
3280

(5 行受影响)

超过181708的部分被截取了!

而后测试过text,ntext,结果一样!


------解决方案--------------------
跟写入数据的方式有关,如下例子.
SQL code

create table #t(id int,x varchar(max))

insert into #t(id,x) select 1,replicate('a',200000)

select id,datalength(x) from #t

id          
----------- --------------------
1           8000


insert into #t(id,x) select 2,replicate(cast('b' as varchar(max)),200000)

select id,datalength(x) from #t

id          
----------- --------------------
1           8000
2           200000

------解决方案--------------------
探讨

引用:

VARCHAR(MAX)操作时,给其赋值的也必须是VARCHAR(MAX)的,如果用VARCHAR(N)给VARCHAR(MAX)赋值会截断的。


嗯,这个我知道额!~