2010-01-16 16 views

risposta

2

Per quanto mi ricordo sono 8000 caratteri.

Per Nvarchar è 4000.

+0

È 8000 caratteri = 8000 byte in sqL ???? – Kumar

+0

@Kumar: ** sì! ** Per 'varchar' è 1 carattere = 1 byte, per' nvarchar' è 1 carattere = 2 byte –

24

Varchar è 8000 ed è nvarchar 4000.

Ecco il riferimento varchar MSDN:
http://msdn.microsoft.com/en-us/library/aa258242(SQL.80).aspx

+0

È 8000 caratteri = 8000 byte in sqL ???? – Kumar

+0

@Kumar: sì, per VARCHAR, 1 carattere = 1 byte; per NVARCHAR, 1 carattere = 2 byte –

+1

È un po 'più complicato di così. La versione breve è che varchar e nvarchar non usano lo spazio finché non si mettono effettivamente i dati lì. –

2

La dimensione massima di varchar (max) è di grandi dimensioni (2 GB o 2 Gcar, penso). Il valore massimo che è possibile specificare per n in varchar (n) è 8000 e per nvarchar è 4000.

+5

Nessun varchar (max) in SQL 2000 – MartW

+0

Hai ragione, ma la domanda è nullo. La seconda parte della mia risposta contiene ancora – erikkallen

11

Una pagina dati di SQL Server ha 8k: 8192 byte. Da questo una parte è riservata per l'intestazione della pagina, lasciando 8060 byte il lnegth massimo che una singola riga può avere. In una riga, i tipi varbinary (n), varchar (n) e nvarchar (n) non possono superare 8000 byte, il che significa che varchar (8000) è la lunghezza massima di Ascii e nvarchar (4000) è la lunghezza massima Unicode (da Unicode memorizza ogni carattere su 2 byte).

La migliore spiegazione di tutti questi dettagli proviene da Inside the Storage Engine: Anatomy of a page.

+1

+1 Piccolo bocconcino: Unicode non memorizza ogni carattere in 2 byte. Questo dipende dalla codifica. UTF-8 e UTF-16 sono codifiche di lunghezza variabile, UTF-32 è l'unica dimensione fissa che io conosca. Esistono altre codifiche (UCS-2, UTF-7). Internamente, Microsoft utilizza in genere UTF-16, in cui la dimensione predefinita di un carattere è 2 byte. Questo vale per almeno tutti i prodotti basati su .NET e per SQL Server. – Abel

+0

@abel: SQL Server [utilizza codifica UCS-2LE] (http://msdn.microsoft.com/en-us/library/ms189617 (v = sql.105) .aspx), che è esattamente 2 byte per carattere. Sono d'accordo anche se quel 'Unicode', come scritto nel post, non ha strettamente 2 byte per carattere. –

+0

Sì, hai ragione su UCS-2, continuo a dimenticarlo, è uno dei miei difetti principali, in quanto consente solo i caratteri BMP. Tx per averlo indicato :) – Abel

Problemi correlati