Jaka jest maksymalna liczba znaków, które może pomieścić nvarchar (MAX)?

102

Jestem nowy w tej koncepcji nvarchar(MAX). Ile znaków pomieści?

quakkels
źródło

Odpowiedzi:

155

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 - 1długości, którą wcześniej ustaliłem - w ten sposób możesz przechowywać 1 znak Unicode mniej niż Twierdziłem wcześniej.

marc_s
źródło
1
Wow ... więc chyba nie muszę się wtedy martwić o ustawienie reguły sprawdzania poprawności maksymalnego rozmiaru. Lepiej jednak uważać, kiedy używam nvarchar (MAX).
quakkels
20
@quakkels: chyba że planujesz pokonać Wojnę i Pokój Tołstoja (około 3,1 miliona znaków) prawie 350 razy - nie, nie będziesz musiał martwić się o pojemność :-) A ponieważ jest to typ VARCHAR / NVARCHAR, będzie zawsze używaj tylko tyle miejsca, ile potrzebujesz - nie martw się o zmarnowaną lub niepotrzebnie zarezerwowaną przestrzeń ...
marc_s
2
naprawdę? To super. Po prostu z ciekawości, w jakim przypadku nie chciałbyś używać nvarchar (MAX)?
quakkels
5
@quakkels: użyj 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)
marc_s
1
Właśnie zacząłem swój poranek zadając mi to samo pytanie i obie Twoje odpowiedzi wywołały szeroki uśmiech na mojej twarzy. +1.
Matthis Kohli
11

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.

Adriaan Stander
źródło
4

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).

nchar oraz nvarchar

Tomasz
źródło