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ística | CHAR(n) | VARCHAR(n) |
| Comprimento | Fixo | Variável |
| Armazenamento | Ocupa sempre ‘n’ bytes | Ocupa [tamanho do dado] + [sobrecarga] |
| Preenchimento | Sim (adiciona espaços) | Não |
| Uso Ideal | Dados 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.