char e varchar (Transact-SQL)

São tipos de dados de cadeia de caracteres de comprimento fixo ou variável.

  • char [ ( n ) ]
    Dados de cadeia de caracteres não Unicode de comprimento fixo. n define o comprimento da cadeia de caracteres e deve ser um valor de 1 a 8.000. O tamanho de armazenamento é n bytes. Quando a página de código de agrupamento usar caracteres de dois bytes, o tamanho de armazenamento ainda será n bytes. Dependendo da cadeia de caracteres, o tamanho de armazenamento de n bytes pode ser inferior ao valor de n. O sinônimo ISO de char é character.

  • varchar [ ( n | max ) ]
    Dados de cadeia de caracteres não Unicode de comprimento variável. n define o comprimento da cadeia de caracteres e pode ser um valor de 1 a 8.000. max indica o tamanho máximo de armazenamento, que é 2^31-1 bytes (2 GB). O tamanho de armazenamento, em bytes, é o valor dos dados reais inseridos + 2 bytes. Os sinônimos de ISO para varchar são char varying ou character varying.

Comentários

Quando n não é especificado em uma definição de dados ou instrução de declaração de variável, o comprimento padrão é 1. Quando n não é especificado ao usar as funções CAST e CONVERT, o comprimento padrão é 30.

Os objetos que usam char ou varchar recebem o agrupamento padrão do banco de dados, a menos que um agrupamento específico seja atribuído com o uso da cláusula COLLATE. O agrupamento controla a página de código que é usada para armazenar os dados de caractere.

Se tiver sites que suportem vários idiomas, considere o uso dos tipos de dados Unicode nchar ou nvarchar para minimizar problemas de conversão de caracteres. Se você usar char ou varchar, recomenda-se o seguinte:

  • Use char quando os tamanhos das entradas de dados de coluna forem consistentes.

  • Use varchar quando os tamanhos das entradas de dados de coluna variarem consideravelmente.

  • Use varchar(max) quando os tamanhos das entradas de dados de coluna variarem consideravelmente e o tamanho puder exceder 8.000 bytes.

Se SET ANSI_PADDING for OFF quando CREATE TABLE ou ALTER TABLE for executada, uma coluna char definida como NULL será tratada como varchar.

Exemplos

A. Mostrando o valor padrão de n quando usado em declaração variável.

O exemplo a seguir mostra que o valor padrão de n é 1 para os tipos de dados char e varchar quando são usados em uma declaração variável.

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

B. Mostrando o valor padrão de n quando varchar é usado com CAST e CONVERT.

O exemplo a seguir mostra que o valor padrão de n é 30 quando os tipos de dados char ou varchar são usados com as funções 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';