Odpowiedzi:
Maks. pojemność to 2 gigabajty przestrzeni - więc patrzysz na nieco ponad 1 miliard 2-bajtowych znaków, które zmieszczą się w NVARCHAR(MAX)
polu.
Używając bardziej szczegółowych liczb drugiej odpowiedzi, powinieneś być w stanie zapisać
(2 ^ 31 - 1 - 2) / 2 = 1'073'741'822 double-byte characters
1 billion, 73 million, 741 thousand and 822 characters to be precise
w twojej NVARCHAR(MAX)
kolumnie (niestety ta ostatnia połowa znaku jest marnowana ...)
Aktualizacja: jak wskazał @MartinMulder: każda kolumna znaków o zmiennej długości ma również 2 bajty narzutu na przechowywanie rzeczywistej długości - więc musiałem odjąć dwa dodatkowe bajty od 2 ^ 31 - 1
długości, którą wcześniej ustaliłem - w ten sposób możesz przechowywać 1 znak Unicode mniej niż Twierdziłem wcześniej.
VARCHAR(MAX)
, jeśli nie potrzebujesz 2-bajtowej obsługi języków azjatyckich, arabskich lub cyrylicy. Użyj, (N)VARCHAR(x)
jeśli wiesz, że ciąg nigdy nie będzie dłuższy niż x znaków (nie używaj NVARCHAR(MAX)
dla imienia - użyj NVARCHAR(50)
lub cokolwiek, co ma dla ciebie sens)
Z char i varchar (Transact-SQL)
varchar [(n | max)]
Dane o zmiennej długości bez znaków Unicode. n może mieć wartość od 1 do 8 000. max wskazuje, że maksymalny rozmiar magazynu to 2 ^ 31-1 bajtów. Rozmiar pamięci to rzeczywista długość wprowadzonych danych + 2 bajty. Wprowadzane dane mogą mieć długość 0 znaków. Synonimami ISO varchar są znaki różniące się znakami lub znakami.
2 ^ 31-1 bajtów. Więc trochę mniej niż 2 ^ 31-1 znaków dla varchar (max) i połowę tego dla nvarchar (max).