Berapa jumlah maksimum karakter yang akan dimiliki oleh nvarchar (MAX)?

102

Saya baru mengenal konsep tersebut nvarchar(MAX). Berapa banyak karakter yang akan dimilikinya?

quakkels
sumber

Jawaban:

155

Max. kapasitasnya adalah 2 gigabyte ruang - jadi Anda melihat lebih dari 1 miliar karakter 2-byte yang akan muat ke dalam suatu NVARCHAR(MAX)bidang.

Menggunakan nomor jawaban yang lebih rinci, Anda harus bisa menyimpan

(2 ^ 31 - 1 - 2) / 2 = 1'073'741'822 double-byte characters

1 billion, 73 million, 741 thousand and 822 characters to be precise

di NVARCHAR(MAX)kolom Anda (sayangnya, karakter setengah terakhir itu terbuang ...)

Pembaruan: seperti yang ditunjukkan @MartinMulder: kolom karakter panjang variabel apa pun juga memiliki overhead 2 byte untuk menyimpan panjang sebenarnya - jadi saya perlu mengurangi dua byte lagi dari 2 ^ 31 - 1panjang yang telah saya tetapkan sebelumnya - sehingga Anda dapat menyimpan 1 karakter Unicode kurang dari Saya telah mengklaim sebelumnya.

marc_s
sumber
1
Wow ... jadi saya rasa saya tidak perlu khawatir tentang menetapkan aturan validasi ukuran maksimal. Saya sebaiknya berhati-hati saat menggunakan nvarchar (MAX).
quakkels
20
@quakkels: kecuali jika Anda berencana untuk mengungguli Tolstoi 'War and Peace (sekitar 3,1 juta karakter) hampir 350 kali lipat - tidak, Anda tidak perlu khawatir tentang kapasitas :-) Dan karena ini adalah tipe VARCHAR / NVARCHAR, itu akan selalu hanya menggunakan ruang sebanyak yang diperlukan - jangan khawatir tentang ruang yang terbuang percuma atau tidak perlu ...
marc_s
2
Betulkah? Itu keren. Baru saja keluar dari curiosit, dalam hal apa Anda tidak ingin menggunakan nvarchar (MAX)?
quakkels
5
@quakkels: gunakan VARCHAR(MAX), jika Anda tidak memerlukan dukungan 2-byte untuk bahasa Asia, Arab atau Sirilik. Gunakan (N)VARCHAR(x)jika Anda tahu sebuah string tidak akan lebih dari x karakter (jangan gunakan NVARCHAR(MAX)untuk nama depan - gunakan NVARCHAR(50)atau apa pun yang masuk akal bagi Anda)
marc_s
1
Saya baru saja memulai pagi saya dengan menanyakan pertanyaan yang sama dan kedua jawaban Anda menyulap senyum lebar di wajah saya. +1.
Matthis Kohli
11

Dari char dan varchar (Transact-SQL)

varchar [(n | max)]

Data karakter non-Unicode dengan panjang variabel. n dapat berupa nilai dari 1 hingga 8.000. max menunjukkan bahwa ukuran penyimpanan maksimum adalah 2 ^ 31-1 byte. Ukuran penyimpanan adalah panjang aktual data yang dimasukkan + 2 byte. Data yang dimasukkan bisa sepanjang 0 karakter. Sinonim ISO untuk varchar bervariasi karakter atau karakter bervariasi.

Adriaan Stander
sumber
4

2 ^ 31-1 byte. Jadi, kurang dari 2 ^ 31-1 karakter untuk varchar (maks) dan setengahnya untuk nvarchar (maks).

nchar dan nvarchar

Thomas
sumber