Curso SQL Server — Edição Definitiva

Módulo 4 — Tipos de Texto e Strings no SQL Server (CHAR, VARCHAR, NVARCHAR, TEXT, NTEXT, VARCHAR(MAX))

Aprenda todos os tipos de texto disponíveis no SQL Server, quando usá-los, limitações, impacto de collation, armazenamento e exemplos práticos.

Objetivo do módulo

Compreender os diferentes tipos de dados textuais no SQL Server, suas diferenças, usos corretos e implicações em performance e armazenamento.

Escolher corretamente entre VARCHAR, NVARCHAR e outros evita desperdício de espaço e problemas com acentuação.

Resumo dos principais tipos de texto

TipoArmazenamentoUnicodeTamanho máximoUso recomendado
CHAR(n)n bytes fixosNão1 a 8000Campos com tamanho sempre fixo, como CEP ou UF
VARCHAR(n)n bytes variáveisNão1 a 8000Textos variáveis sem Unicode
VARCHAR(MAX)Armazena até 2GBNão2^31-1Grandes textos, substitui TEXT
NVARCHAR(n)2n bytesSim1 a 4000Textos com acentuação, múltiplos idiomas
NVARCHAR(MAX)2GBSim2^31-1Grandes textos com Unicode
TEXTDeprecatedNão2GBSubstitua por VARCHAR(MAX)
NTEXTDeprecatedSim2GBSubstitua por NVARCHAR(MAX)

VARCHAR(n)

O que é / Para que serve: Armazena texto com tamanho variável, até 8000 caracteres, não-Unicode.

Sintaxe: col VARCHAR(100)

Como funciona: Economiza espaço quando os tamanhos variam, pois só armazena o necessário.

Implicações & boas práticas: • Use para textos curtos e médios em sistemas sem necessidade de Unicode. • Evite usar para textos muito longos, prefira VARCHAR(MAX).

CREATE TABLE Produtos (
    ProdutoID INT PRIMARY KEY,
    Nome VARCHAR(100)
);
INSERT INTO Produtos VALUES (1,'Mouse'),(2,'Teclado');
SELECT * FROM Produtos;

NVARCHAR(n)

O que é / Para que serve: Semelhante ao VARCHAR, mas armazena texto Unicode (UTF-16), permitindo caracteres especiais e acentuação.

Sintaxe: col NVARCHAR(100)

Como funciona: Armazena 2 bytes por caractere, ideal para nomes, endereços e textos multilíngues.

Implicações & boas práticas: • Sempre prefira NVARCHAR quando lidar com acentuação ou múltiplos idiomas. • Impacta mais no armazenamento, mas evita problemas de compatibilidade.

CREATE TABLE Clientes (
    ClienteID INT PRIMARY KEY,
    Nome NVARCHAR(100)
);
INSERT INTO Clientes VALUES (1,N'Ana'),(2,N'José');
SELECT * FROM Clientes;

CHAR(n)

O que é / Para que serve: Armazena texto de tamanho fixo, preenchendo com espaços quando necessário.

Sintaxe: col CHAR(2)

Como funciona: Útil para códigos padronizados, como UF (SP, RJ), onde todos os valores têm o mesmo tamanho.

Implicações & boas práticas: • Evite CHAR para textos variáveis, pois desperdiça espaço. • Ideal quando todos os registros têm tamanho fixo.

CREATE TABLE Estados (
    UF CHAR(2) PRIMARY KEY,
    Nome VARCHAR(50)
);
INSERT INTO Estados VALUES ('SP','São Paulo'),('RJ','Rio de Janeiro');
SELECT * FROM Estados;

VARCHAR(MAX)

O que é / Para que serve: Armazena grandes volumes de texto não-Unicode, substituindo o tipo TEXT.

Sintaxe: col VARCHAR(MAX)

Como funciona: Permite até 2GB de dados, armazenados em páginas especiais fora da linha.

Implicações & boas práticas: • Use para campos de descrição extensa, logs ou conteúdos textuais longos. • Prefira VARCHAR(MAX) ao TEXT, pois o TEXT está obsoleto.

CREATE TABLE Artigos (
    ID INT PRIMARY KEY,
    Conteudo VARCHAR(MAX)
);
INSERT INTO Artigos VALUES (1,'Este é um artigo longo...');
SELECT LEN(Conteudo) FROM Artigos;

NVARCHAR(MAX)

O que é / Para que serve: Semelhante ao VARCHAR(MAX), mas armazena Unicode.

Sintaxe: col NVARCHAR(MAX)

Como funciona: Ideal para grandes textos multilíngues com acentuação.

Implicações & boas práticas: • Substitui NTEXT, que está obsoleto. • Mais pesado que VARCHAR(MAX), mas garante compatibilidade internacional.

CREATE TABLE Documentos (
    ID INT PRIMARY KEY,
    Texto NVARCHAR(MAX)
);
INSERT INTO Documentos VALUES (1,N'Contrato com cláusulas especiais…');
SELECT DATALENGTH(Texto) FROM Documentos;

Referências oficiais & leituras recomendadas