Em resumo:

  • CHAR tem comprimento fixo.
  • VARCHAR tem comprimento variável.

🚀 CHAR (Comprimento Fixo)

Este tipo de dado armazena strings de caracteres com um tamanho fixo.

  • Declaração: CHAR(n), onde ‘n’ é o número de caracteres.
  • Armazenamento: Ele sempre ocupará ‘n’ bytes de espaço, independentemente do que você inserir.
  • Preenchimento (Padding): Se você inserir um dado menor que ‘n’, o SQL Server preencherá o restante com espaços em branco (padding) até atingir o tamanho ‘n’.

Exemplo:

Se você tem uma coluna Status definida como CHAR(10):

  • Se você inserir ‘Ativo’ (5 caracteres), ele será armazenado como ‘Ativo ‘ (com 5 espaços no final).
  • Ocupará sempre 10 bytes no disco.

Quando usar: Ideal para dados que você sabe que sempre terão o mesmo tamanho.

  • Siglas de estados (ex: CHAR(2) para ‘SP’, ‘RJ’, ‘MG’).
  • Códigos de status (ex: CHAR(1) para ‘A’, ‘I’, ‘P’).
  • CEP (se armazenado sem máscara, ex: CHAR(8)).

🏃 VARCHAR (Comprimento Variável)

Este tipo de dado armazena strings de caracteres com um tamanho variável, até um limite máximo.

  • Declaração: VARCHAR(n), onde ‘n’ é o tamanho máximo de caracteres.
  • Armazenamento: Ele ocupará apenas os bytes necessários para os caracteres que você inseriu, mais uma pequena sobrecarga (1 ou 2 bytes) que o sistema usa para registrar o comprimento do dado.
  • Preenchimento (Padding): Ele não adiciona espaços.

Exemplo:

Se você tem uma coluna Nome definida como VARCHAR(50):

  • Se você inserir ‘Ana’ (3 caracteres), ele armazenará apenas ‘Ana’.
  • Ocupará 3 bytes + a sobrecarga (totalizando 4 ou 5 bytes), e não 50.

Quando usar: Na maioria dos casos. É a escolha padrão para dados cujo tamanho varia.

  • Nomes de pessoas, cidades, produtos.
  • Endereços.
  • Endereços de e-mail.
  • Qualquer texto onde o tamanho não é previsível.

Tabela de Comparação Rápida

CaracterísticaCHAR(n)VARCHAR(n)
ComprimentoFixoVariável
ArmazenamentoOcupa sempre ‘n’ bytesOcupa [tamanho do dado] + [sobrecarga]
PreenchimentoSim (adiciona espaços)Não
Uso IdealDados de tamanho previsível (UF, CEP)Dados de tamanho variável (Nomes, E-mails)

⚠️ Uma Observação Importante: NCHAR vs NVARCHAR

Você também verá NCHAR e NVARCHAR. A lógica é a mesma (fixo vs. variável), mas o “N” significa Unicode.

  • CHAR e VARCHAR usam 1 byte por caractere (padrão ASCII/Latin).
  • NCHAR e NVARCHAR usam 2 bytes por caractere (padrão Unicode), permitindo armazenar caracteres de múltiplos idiomas (como japonês, árabe, emojis 😊, etc.).

Se você precisa de suporte a múltiplos idiomas, use NVARCHAR.