char and varchar (Transact-SQL)

Tipo di dati stringa a lunghezza fissa o variabile.

  • char [ ( n ) ]
    Dati di tipo stringa a lunghezza fissa non Unicode. n definisce la lunghezza della stringa e deve essere un valore compreso tra 1 e 8.000. Le dimensioni di archiviazione sono di n byte. Quando la tabella codici delle regole di confronto utilizza caratteri a doppio byte, le dimensioni di archiviazione risultano comunque pari a n byte. A seconda della stringa di caratteri, le dimensioni di archiviazione di n byte possono corrispondere a un valore inferiore a n. Il sinonimo di ISO per char è character.

  • varchar [ ( n | max ) ]
    Dati di tipo stringa a lunghezza variabile non Unicode. n definisce la lunghezza della stringa e può essere un valore compreso tra 1 e 8.000. max indica che le dimensioni massime dello spazio di archiviazione sono 2^31-1 byte (2 GB). Le dimensioni dello spazio di archiviazione, in byte, corrispondono al valore dei dati effettivi immessi + 2 byte. I sinonimi di ISO per il tipo di dati varchar sono charvarying o character varying.

Osservazioni

Se n viene omesso nell'istruzione di definizione dei dati o di dichiarazione di variabili, la lunghezza predefinita è 1. Se n viene omesso nelle funzioni CAST e CONVERT, la lunghezza predefinita è 30.

Agli oggetti in cui è utilizzato il tipo di dati char o varchar vengono assegnate le regole di confronto predefinite del database, a meno che non vengano assegnate regole di confronto specifiche tramite la clausola COLLATE. Le regole di confronto controllano la tabella codici utilizzata per l'archiviazione dei dati di tipo carattere.

Nel caso di siti che supportano più lingue, è consigliabile utilizzare i tipi di dati Unicode nchar o nvarchar per ridurre al minimo i problemi di conversione dei caratteri. Se si utilizzano i tipi di dati char o varchar, è consigliabile:

  • Utilizzare il tipo di dati char quando le dimensioni delle voci della colonna dati sono consistenti.

  • Utilizzare il tipo di dati varchar quando le dimensioni delle voci della colonna dati variano in modo significativo.

  • Utilizzare il tipo di dati varchar(max) quando le dimensioni delle voci della colonna dati variano in modo significativo e le dimensioni possono essere superiori a 8.000 byte.

Se l'opzione SET ANSI_PADDING è impostata su OFF quando si esegue l'istruzione CREATE TABLE o ALTER TABLE, le colonne di tipo char definite come NULL vengono gestite come colonne di tipo varchar.

Esempi

A. Visualizzazione del valore predefinito di n se utilizzato per la dichiarazione di variabili.

Nell'esempio seguente viene illustrato come il valore predefinito di n è 1 per i tipi di dati char e varchar quando vengono utilizzati per la dichiarazione di variabili.

DECLARE @myVariable AS varchar = 'abc', @myNextVariable AS char = 'abc';
--The following returns 1
SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable);
GO

B. Visualizzazione del valore predefinito di n se varchar viene utilizzato con CAST e CONVERT.

Nell'esempio seguente viene illustrato come il valore predefinito di n è 30 quando i tipi di dati char e varchar vengono utilizzati con le funzioni CAST e CONVERT.

DECLARE @myVariable AS varchar(40) = 'This string is longer than thirty characters';
SELECT CAST(@myVariable AS varchar);
SELECT DATALENGTH(CAST(@myVariable AS varchar)) AS 'VarcharDefaultLength';
SELECT CONVERT(char, @myVariable);
SELECT DATALENGTH(CONVERT(char, @myVariable)) AS 'VarcharDefaultLength';