我想存储一个超过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个字符的字符串。
答案 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;