Używając VARCHAR(MAX)
po prostu mówisz SQL Serverowi „przechowuj wartości w tym polu tak, jak widzisz najlepiej”, SQL Server następnie wybierze, czy przechowywać wartości jako zwykły VARCHAR
lub jako LOB (duży obiekt). Ogólnie rzecz biorąc, jeśli przechowywane wartości są mniejsze niż 8000 bajtów, SQL Server będzie traktował wartości jako zwykły VARCHAR
wpisz.
Jeśli przechowywane wartości są zbyt duże, kolumna może rozlać się ze strony na strony LOB, dokładnie tak samo jak w przypadku innych typów LOB (text
, ntext
i obraz
). .
W rzeczywistości w SQL Server 2008 lub nowszym dane mogą przepełnić się na dodatkowe strony, nawet w przypadku typów danych o stałej długości (np. VARCHAR(3000)
), jednak te strony są nazywane stronami przepełnienia wierszy i są traktowane nieco inaczej.
Wersja skrócona: z perspektywy przechowywania nie ma żadnych wad używania VARCHAR(MAX)
ponad VARCHAR(N)
dla niektórych N
.
(Zauważ, że dotyczy to również innych typów pól o zmiennej długości NVARCHAR
i VARBINARY
)
FYI — nie możesz tworzyć indeksów w VARCHAR(MAX) kolumny