2015-10-09 3 views
0

Я хочу сохранить строку более 8000 символов, поэтому я использовал VARCHAR (MAX), потому что ее предел равен 2gb.Почему varchar (max) не хранит данные более 8000 charaters

, пожалуйста, исправьте меня, если я ошибаюсь. Varchar (max) хранит данные на страницах IN_ROW_DATA, если строка меньше или равна 8000. Если строка больше 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 (макс) и VARCHAR (8000).

Может кто-нибудь сказать мне, что я делаю неправильно, и как хранить строку более 8000 символов.

+1

http://dba.stackexchange.com/questions/18483/varcharmax-field-cutting-off-data-after-8000-characters-sql-server-2008 –

+0

Я надеюсь, что эта ссылка вам помочь [HTTP : //stackoverflow.com/questions/24041718/text-column-not-storing-more-than-8000-characters] (http://stackoverflow.com/questions/24041718/text-column-not-storing-more- чем 8000-х символов). –

ответ

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; 
+0

Отсутствует какая-то скобка (исправлено это). Ваш ответ самый лучший, удалите мою и проголосуйте. – Shnugo

+0

Спасибо за редактирование :) – cliffordheath

Смежные вопросы