CodeGym /Cursos /SQL SELF /Tipos de dados de texto: CHAR, VARCH...

Tipos de dados de texto: CHAR, VARCHAR, TEXT

SQL SELF
Nível 15, Lição 2
Disponível

Quando a gente fala de trabalhar com dados de texto no PostgreSQL, temos três personagens principais: CHAR, VARCHAR e TEXT. Cada um tem suas particularidades, vantagens e pegadinhas. Bora entender cada um deles.

CHAR(n)

CHAR, ou character, é uma string de tamanho fixo n. Se a string tiver menos caracteres do que o especificado, ela é completada automaticamente com espaços.

Exemplo:

id código - CHAR(5)
1 ''ABC''

Esse tipo é massa quando todas as strings precisam ter o mesmo tamanho (tipo códigos, códigos de barras ou identificadores de tamanho fixo).

Mas se você for trabalhar com texto de tamanho variável, esses espaços extras só vão ocupar espaço à toa no banco.

VARCHAR(n)

VARCHAR, ou variable character, serve pra guardar strings de tamanho variável, mas com um limite máximo de n caracteres.

Exemplo:

id username - VARCHAR(10)
1 ''Alice''

Esse tipo usa o espaço de forma eficiente, porque só salva o texto real. O lado ruim é que você tem que definir o limite de tamanho. Se a string passar desse limite, o banco vai dar erro.

TEXT

TEXT é um tipo de dado textual que não tem limite de tamanho. Ele é muito usado quando você não faz ideia de até onde o texto pode crescer.

Exemplo:

id conteúdo - TEXT
1 ''This is a long piece of text. No limits!''

Vantagens: dá pra guardar textos de qualquer tamanho, sem se preocupar com limites.

Desvantagens: sem limites, pode acabar usando espaço demais no banco se os textos começarem a ficar gigantes.

Comparando os tipos de dados de texto

Quando você mexe com texto, é importante sacar qual tipo de dado é melhor pra cada situação. Olha só as principais diferenças entre CHAR, VARCHAR e TEXT:

Tipo de dado Tamanho Performance Quando usar?
CHAR(n) Fixo Mais rápido pra strings de tamanho fixo Pra códigos de tamanho fixo (tipo ISO)
VARCHAR(n) Tamanho máximo n Mais rápido que TEXT quando tem limite Pra strings de tamanho variável com limite conhecido
TEXT Ilimitado O mais versátil Pra textos longos, quando não dá pra prever o tamanho

Exemplos práticos de uso

Agora bora ver como usar esses tipos de dados em situações reais.

Exemplo 1: Usando CHAR pra códigos de tamanho fixo

Imagina que você tá mexendo num banco de dados onde precisa guardar códigos de cidades seguindo o padrão ISO 3166-1 alpha-3. Cada código tem que ter exatamente 3 caracteres.

city_id city_name - VARCHAR(50) iso_code - CHAR(3)
1 New York NYC
2 Los Angeles LAX
3 Chicago CHI

Aqui o CHAR(3) é perfeito, porque cada código ISO da cidade tem tamanho fixo.

Exemplo 2: Usando VARCHAR pra nomes de usuário

Nome de usuário é um ótimo caso pra VARCHAR. Normalmente o nome tem tamanho variável, mas dá pra supor que nunca vai passar de 50 caracteres.

user_id username - VARCHAR(50) email - VARCHAR(50)
1 Alice alice@example.com
2 Bob bob@example.net

VARCHAR nesse caso economiza espaço, já que o tamanho real da string pode ser menor que 50 caracteres.

Exemplo 3: Usando TEXT pra guardar descrições

Imagina que você tem um blog, e pra cada post precisa guardar uma descrição grandona. Aqui o melhor é usar TEXT.

post_id title - VARCHAR(100) content - TEXT
1 Post 1 This is a very long blog post content that goes on and on...

Se você nunca sabe o tamanho do texto de antemão, TEXT é a escolha certa.

4. Outros detalhes e pegadinhas

Quando você mexe com tipos de dados de texto, tem uns detalhes que vale a pena ficar ligado pra não cair em cilada.

Problema: CHAR adiciona espaços

Se você tentar comparar strings num campo CHAR sem considerar os espaços adicionados, pode acabar tendo resultados estranhos.

SELECT * FROM cities WHERE iso_code = 'NYC';
-- Não retorna nada se não tirar os espaços

Como resolver: Usa a função TRIM() pra remover os espaços.

SELECT * FROM cities WHERE TRIM(iso_code) = 'NYC';

Problema: Limite de tamanho no VARCHAR pode dar erro

Se você tentar inserir numa coluna VARCHAR uma string maior que o limite, o banco vai dar erro.

INSERT INTO users (username, email) VALUES ('A_username_that_is_too_long_for_field', 'test@example.com');
-- Erro

Como resolver: Garante que o limite de tamanho (n) faz sentido pro seu caso. Ou usa TEXT pra não ter limite.

Problema: TEXT pode engordar seu banco

TEXT guarda dados sem limite, o que pode fazer as tabelas crescerem demais e dificultar a indexação.

Como evitar: Se você pretende indexar muito uma coluna TEXT, pensa em usar um VARCHAR limitado.

2
Tarefa
SQL SELF, nível 15, lição 2
Bloqueado
Conversão de caixa e remoção de espaços
Conversão de caixa e remoção de espaços
2
Tarefa
SQL SELF, nível 15, lição 2
Bloqueado
Filtragem por padrão (LIKE)
Filtragem por padrão (LIKE)
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION