为什么varchar(max)不存储超过8000个字符的数据

时间:2015-10-09 06:47:05

标签: sql-server-2008

我想存储一个超过8000个字符的字符串,所以我使用了VARCHAR(MAX),因为它的限制是2gb。

如果错误,请纠正我。如果字符串小于或等于8000,则Varchar(max)将数据存储在IN_ROW_DATA页面中。如果字符串大于8000,则它开始将字符串存储在LOB_DATA页面中,指针是存储在IN_ROW_DATA页面中。

下面的代码不存储大于8000个字符的字符串。

create table test(name varchar(max))
insert into test
values(replicate('a',8001)

Select len(name) from test  

- 这仍然会给我8000的长度,而不是8001.所以在这种情况下,varchar(max)和varchar(8000)之间没有区别。

有人可以告诉我我做错了什么以及如何存储超过8000个字符的字符串。

1 个答案:

答案 0 :(得分:3)

在插入数据之前,您将数据截断为8000字节。要创建长度超过8000个字符的值,必须使用varchar(max)数据类型,而“a”的类型只是varchar。

create table test(name varchar(max))
insert into test
values(replicate(CAST('a' AS varchar(MAX)), 100000));

select len(name) from test;