char y varchar (Transact-SQL)

Son tipos de datos de cadena que tienen longitud fija o variable.

  • char [ ( n ) ]
    Datos de cadena no Unicode de longitud fija. n define la longitud de cadena y debe ser un valor comprendido entre 1 y 8.000. El tamaño de almacenamiento es de n bytes. Si la página de códigos de la intercalación utiliza caracteres de doble byte, el tamaño de almacenamiento sigue siendo de n bytes. Dependiendo de la cadena, el tamaño de almacenamiento de n bytes puede ser inferior al valor de n. El sinónimo de char en ISO es character.

  • varchar [ ( n | max ) ]
    Datos de cadena no Unicode de longitud variable. n define la longitud de cadena y debe ser un valor comprendido entre 1 y 8.000. max indica que el tamaño de almacenamiento máximo es 2^31-1 bytes (2 GB). El tamaño de almacenamiento, en bytes, es el valor de los datos reales especificados + 2 bytes. Los sinónimos de varchar en ISO son charvarying o character varying.

Comentarios

Cuando no se especifica el argumento n en una instrucción de definición de datos o de declaración de variable, la longitud predeterminada es 1. Cuando no se especifica n al utilizar las funciones CAST y CONVERT, la longitud predeterminada es 30.

A los objetos que utilizan char o varchar se les asigna la intercalación predeterminada de la base de datos, a menos que se asigne una intercalación específica mediante la cláusula COLLATE. La intercalación controla la página de códigos utilizada para almacenar los datos de caracteres.

Si tiene sitios que admiten varios idiomas, considere el uso de tipos de datos Unicode nchar o nvarchar para reducir al mínimo los problemas de conversión de caracteres. Si usa char o varchar, siga estas recomendaciones:

  • Utilice char cuando los tamaños de las entradas de datos de columna sean coherentes.

  • Utilice varchar cuando los tamaños de las entradas de datos de columna varíen de forma considerable.

  • Utilice varchar(max) cuando los tamaños de las entradas de datos de columna varíen de forma considerable y se pudieran superar los 8.000 bytes.

Si SET ANSI_PADDING es OFF cuando se ejecuta CREATE TABLE o ALTER TABLE, una columna de tipo char definida como NULL se trata como si fuera de tipo varchar.

Ejemplos

A. Mostrar el valor predeterminado de n cuando se utiliza en una declaración de variable.

En el ejemplo siguiente se muestra que el valor predeterminado de n es 1 para los tipos de datos char y varchar cuando se utilizan en una declaración de variable.

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

B. Mostrar el valor predeterminado de n cuando varchar se utiliza con CAST y CONVERT.

En el ejemplo siguiente se muestra que el valor predeterminado de n es 30 cuando se utiliza el tipo de datos char o varchar con las funciones CAST y 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';