Aprenda todos os tipos de texto disponíveis no SQL Server, quando usá-los, limitações, impacto de collation, armazenamento e exemplos práticos.
Compreender os diferentes tipos de dados textuais no SQL Server, suas diferenças, usos corretos e implicações em performance e armazenamento.
| Tipo | Armazenamento | Unicode | Tamanho máximo | Uso recomendado |
|---|---|---|---|---|
| CHAR(n) | n bytes fixos | Não | 1 a 8000 | Campos com tamanho sempre fixo, como CEP ou UF |
| VARCHAR(n) | n bytes variáveis | Não | 1 a 8000 | Textos variáveis sem Unicode |
| VARCHAR(MAX) | Armazena até 2GB | Não | 2^31-1 | Grandes textos, substitui TEXT |
| NVARCHAR(n) | 2n bytes | Sim | 1 a 4000 | Textos com acentuação, múltiplos idiomas |
| NVARCHAR(MAX) | 2GB | Sim | 2^31-1 | Grandes textos com Unicode |
| TEXT | Deprecated | Não | 2GB | Substitua por VARCHAR(MAX) |
| NTEXT | Deprecated | Sim | 2GB | Substitua 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;