Condividi tramite


nchar e nvarchar (Transact-SQL)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure azure Synapse Analytics Analytics Platform System (PDW)

Tipi di dati character a dimensione fissa nchar o a dimensione variabile nvarchar. In SQL Server 2012 (11.x) e versioni successive, quando si usano regole di confronto abilitate per caratteri supplementari (SC), questi tipi di dati archiviano l'intera gamma di dati carattere Unicode e usano la codifica dei caratteri UTF-16. Se si specificano regole di confronto non SC, questi tipi di dati archiviano solo il subset di dati di tipo carattere supportati dalla codifica dei caratteri UCS-2.

Argomenti

nchar [ ( n ) ]

Dati stringa a dimensione fissa. n definisce le dimensioni della stringa in coppie di byte e deve essere un valore compreso tra 1 e 4.000. Le dimensioni di archiviazione, espresse in byte, sono pari al doppio di n. Per la codifica UCS-2, le dimensioni di archiviazione sono pari al doppio di n byte e anche il numero di caratteri che possono essere archiviati è n. Per la codifica UTF-16, le dimensioni di archiviazione sono ancora due volte n byte, ma il numero di caratteri che possono essere archiviati potrebbe essere inferiore a n, perché i caratteri supplementari usano due coppie di byte (dette anche coppie di surrogati). I sinonimi ISO per nchar sono national char e national character.

nvarchar [ ( n | max ) ]

Dati stringa a dimensione variabile. Il valore di n definisce le dimensioni della stringa in coppie di byte e può essere compreso tra 1 e 4.000. max indica che la dimensione di archiviazione massima è di 2^31-1 caratteri (2 GB). Le dimensioni di archiviazione, espresse in byte, sono pari al doppio di n byte + 2 byte. Per la codifica UCS-2, le dimensioni di archiviazione sono pari al doppio di n byte + 2 byte e anche il numero di caratteri che possono essere archiviati è n. Per la codifica UTF-16, le dimensioni di archiviazione sono ancora due volte n byte + 2 byte. Tuttavia, il numero di caratteri che possono essere archiviati potrebbe essere minore di n, perché i caratteri supplementari usano due coppie di byte (dette anche coppie di surrogati). I sinonimi ISO per nvarchar sono national char varying e national character varying.

Osservazioni:

Un errore comune consiste nel pensare che con nchar(n) e nvarchar(n), n definisce il numero di caratteri. Tuttavia, in nchar(n) e nvarchar(n), n definisce la lunghezza della stringa in coppie di byte (0-4.000). n non definisce mai il numero di caratteri che è possibile archiviare, Questo concetto è simile alla definizione di char e varchar.

L'errore si verifica perché quando si usano caratteri definiti nell'intervallo Unicode da 0 a 65.535, è possibile archiviare un carattere per ogni coppia di byte. Tuttavia, in intervalli Unicode più elevati (da 65.536 a 1.114.111) un carattere potrebbe usare due coppie di byte. Ad esempio, in una colonna definita come nchar(10) il motore di database può archiviare 10 caratteri che usano una coppia di byte (intervallo Unicode compreso tra 0 e 65.535), ma meno di 10 caratteri quando si usano due coppie di byte (intervallo Unicode compreso tra 65.536 e 1.114.111). Per altre informazioni sull'archiviazione Unicode e sugli intervalli di caratteri, vedere Differenze nell'archiviazione tra UTF-8 e UTF-16.

Se non si specifica n in un'istruzione di definizione dei dati o di dichiarazione di variabili, la lunghezza predefinita è 1. Se non si specifica n con la funzione CAST, la lunghezza predefinita è 30.

Se si usa nchar o nvarchar, è consigliabile:

  • Usare nchar quando le dimensioni delle voci di dati delle colonne sono coerenti.
  • Usare nvarchar quando le dimensioni delle voci di dati delle colonne presentano notevoli differenze.
  • Usare nvarchar(max) quando le dimensioni delle voci di dati delle colonne variano in modo significativo e la lunghezza delle stringhe potrebbe essere superiore a 4.000 coppie di byte.

sysname è un tipo di dati definito dall'utente fornito dal sistema equivalente funzionalmente a nvarchar(128), ad eccezione del fatto che non è nullable. sysname viene usato per fare riferimento a nomi di oggetti di database.

Agli oggetti che usano nchar o nvarchar vengono assegnate le regole di confronto predefinite del database, a meno che non venga assegnata una regola di confronto specifica tramite la COLLATE clausola .

SET ANSI_PADDING è sempre ON per nchar e nvarchar. SET ANSI_PADDING OFF non si applica ai tipi di dati nchar o nvarchar .

Anteporre una costante di stringa di caratteri Unicode con la lettera N per segnalare l'input UCS-2 o UTF-16, a seconda che vengano usate o meno regole di confronto SC. Senza il N prefisso, la stringa viene convertita nella tabella codici predefinita del database che potrebbe non riconoscere determinati caratteri. In SQL Server 2019 (15.x) e versioni successive, quando si usano regole di confronto abilitate per UTF-8, la tabella codici predefinita è in grado di archiviare il set di caratteri UTF-8 Unicode.

Quando si antepone una costante stringa con la lettera N, la conversione implicita genera una stringa UCS-2 o UTF-16 se la costante da convertire non supera la lunghezza massima per il tipo di dati stringa nvarchar (4.000). In caso contrario, la conversione implicita comporta un valore di grandi dimensioni nvarchar(max).

Avviso

Ogni colonna non Null varchar(max) o nvarchar(max) richiede 24 byte di allocazione fissa aggiuntiva che concorre al raggiungimento del limite delle righe di 8.060 byte durante un'operazione di ordinamento. Questi byte aggiuntivi possono creare un limite implicito al numero di colonne non Null varchar(max) o nvarchar(max) in una tabella. Non vengono segnalati errori particolari (oltre il normale avviso che indica che le dimensioni massime per le righe superano il valore massimo consentito di 8.060 byte) durante la creazione della tabella o l'inserimento dei dati. Questa dimensione di riga di grandi dimensioni può causare errori ,ad esempio l'errore 512, che gli utenti potrebbero non prevedere durante alcune normali operazioni. ad esempio l'aggiornamento della chiave di indice cluster o l'ordinamento del set di colonne completo.

Convertire i dati di tipo carattere

Per informazioni sulla conversione dei dati di tipo carattere, vedere char e varchar. Per altre informazioni sulla conversione tra tipi di dati, vedere CAST e CONVERT.