char and varchar (Transact-SQL)

Tipo di dati character a lunghezza fissa o variabile.

  • char [ ( n ) ]
    Dati di tipo carattere a lunghezza fissa non Unicode con una lunghezza di n byte. n deve essere un valore compreso tra 1 e 8.000. Le dimensioni di archiviazione sono di n byte. Il sinonimo di ISO per char è character.

  • varchar [ ( n | max ) ]
    Dati di tipo carattere a lunghezza variabile non Unicode. n 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. Le dimensioni di archiviazione sono pari all'effettiva lunghezza dei dati immessi + 2 byte. La lunghezza dei dati immessi può essere uguale a 0 caratteri. I sinonimi di ISO per il tipo di dati varchar sono char varying o character varying.

Osservazioni

Se n non viene specificato nelle istruzioni di definizione dei dati o di dichiarazione delle variabili, la lunghezza predefinita è 1. Se nelle funzioni CAST e CONVERT n viene omesso, 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.

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 meno di n caratteri.

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
DECLARE @myNextVariable AS char
SET @myVariable = 'abc'
SET @myNextVariable = '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)
SET @myVariable = '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';