Guia Completo de Decisão (A vs B vs C)
⚡ Abrir Lista Compacta de Todos os Comandos & Tipos →

Todos os Tipos SQL: Para que servem, Onde usar e O que muda entre A, B ou C

Consulte todos os tipos de campos do banco de dados organizados por categoria funcional. Entenda exatamente para que serve cada tipo, onde aplicar no seu projeto e o que muda na prática se você escolher o tipo A, B ou C na hora de desenhar no DrawDB e programar em PHP.

1. Textos e Caracteres (Strings Curtas e Longas)

Para nomes, documentos, e-mails, senhas, descrições, artigos HTML e observações.

6 Tipos SQL nesta categoria

⚖️ O que muda se eu usar (A) CHAR, (B) VARCHAR ou (C) TEXT?

Comparativo de Impacto Real (A vs B vs C)
A CHAR(11), CHAR(2), CHAR(8)

Opção A: Usar CHAR(n)

🔄 O que muda no banco: O banco reserva SEMPRE o tamanho fixo exato no disco. Se você definir CHAR(10) e gravar "OI", ele preenche com 8 espaços até completar 10.
✅ Vantagem: Mais rápido para leitura e índices quando 100% das linhas têm o mesmo tamanho (CPF, CEP, UF, UUID). Não gasta bytes extras para anotar o tamanho.
⚠️ Cuidado / Limitação: Se usar para nomes ou e-mails (onde cada pessoa tem um tamanho diferente), desperdiça espaço em disco.
🎯 Use SOMENTE quando o tamanho do texto for sempre fixo e igual.
B VARCHAR(120), VARCHAR(255)

Opção B: Usar VARCHAR(n)

🔄 O que muda no banco: O banco grava apenas as letras digitadas + 1 ou 2 bytes que anotam quantas letras foram salvas. Se definir VARCHAR(150) e gravar "Ana", gasta só 4 bytes no disco!
✅ Vantagem: Permite criar índices normais e UNIQUE na coluna inteira, aceita valor DEFAULT e fica armazenado diretamente dentro da linha da tabela (leitura muito rápida).
⚠️ Cuidado / Limitação: Na memória RAM (durante ORDER BY ou tabelas temporárias), o banco pode alocar buffers baseados no limite máximo `n`. Por isso não coloque VARCHAR(5000) se só precisa de VARCHAR(120).
🎯 Use para 90% dos textos do sistema (nomes, e-mails, títulos, telefones, senhas, URLs).
C TEXT, MEDIUMTEXT, LONGTEXT

Opção C: Usar TEXT (TINY / TEXT / MEDIUM / LONG)

🔄 O que muda no banco: O texto não fica guardado junto com as outras colunas da linha! O banco guarda o texto em uma área separada do disco (off-page) e deixa apenas um ponteiro de 20 bytes na tabela.
✅ Vantagem: Permite guardar textos gigantescos (de 64 KB até 4 GB) sem travar a leitura das outras colunas da tabela.
⚠️ Cuidado / Limitação: Mais lento quando precisa recuperar o texto (exige leitura extra no disco), não aceita índice UNIQUE comum sem especificar tamanho de prefixo e é inadequado para buscas com `=` simples.
🎯 Use para textos longos abertos: descrições de produtos, corpo de posts, contratos, observações e HTML.
CHAR(n) 📐 DrawDB: CHAR | Size: n (1 a 255)
💾 Fixo: n caracteres (1 a 255)

📌 Para que serve este Tipo SQL:

Armazenar códigos e siglas que têm SEMPRE a mesma quantidade exata de caracteres em todos os cadastros.

📍 Onde posso usar:

  • • Sigla de Estado / UF: CHAR(2) -> "SP", "RJ", "MG"
  • • CEP sem traço: CHAR(8) -> "01310100"
  • • CPF sem pontos: CHAR(11) -> "01234567890"
  • • CNPJ sem pontos: CHAR(14) -> "12345678000199"
  • • UUID padrão: CHAR(36) | Hash SHA-256: CHAR(64)

⚖️ O que muda se eu escolher este?

Se escolher CHAR em vez de VARCHAR para CPF/UF, você economiza 1 byte de controle por linha e evita fragmentação quando o registro é atualizado.

🐘 PHP PDO: Limpe máscaras com preg_replace('/\D/', '', $valor) e envie com PDO::PARAM_STR.
Ver código SQL/PHP →
VARCHAR(n) 📐 DrawDB: VARCHAR | Size: n (ex: 100, 150, 255)
💾 Variável: tamanho do texto + 1 ou 2 bytes (até 16.383 chars em utf8mb4)

📌 Para que serve este Tipo SQL:

Armazenar textos curtos ou médios cujo comprimento varia de um registro para outro, mas possui um teto máximo conhecido.

📍 Onde posso usar:

  • • Nome de pessoa ou produto: VARCHAR(120)
  • • E-mail de login (com UNIQUE): VARCHAR(150)
  • • Senha com password_hash() do PHP: VARCHAR(255)
  • • Telefone / WhatsApp: VARCHAR(20)
  • • Caminho de imagem / URL: VARCHAR(255)

⚖️ O que muda se eu escolher este?

Se escolher VARCHAR(150) em vez de TEXT, você consegue colocar índice UNIQUE (essencial para e-mail e slug), definir DEFAULT e fazer buscas rápidas por igualdade (`WHERE email = :email`).

🐘 PHP PDO: Valide o limite máximo com mb_strlen($texto, 'UTF-8') <= $n antes de fazer o INSERT.
Ver código SQL/PHP →
TINYTEXT 📐 DrawDB: TINYTEXT | Size: vazio
💾 Até 255 bytes (~255 caracteres) + 1 byte de prefixo

📌 Para que serve este Tipo SQL:

Texto curto armazenado fora da linha principal (raramente necessário hoje em dia).

📍 Onde posso usar:

  • • Notas rápidas ou resumos curtos quando a tabela já atingiu o limite de 65.535 bytes das colunas VARCHAR.

⚖️ O que muda se eu escolher este?

Na prática, quase sempre é melhor usar VARCHAR(255) do que TINYTEXT, pois VARCHAR(255) aceita valor DEFAULT e índices completos nativamente.

🐘 PHP PDO: Prefira VARCHAR(255) a menos que precise aliviar o tamanho interno da linha da tabela.
Ver código SQL/PHP →
TEXT 📐 DrawDB: TEXT | Size: vazio
💾 Até 65.535 bytes (~64 KB — cerca de 15 a 30 páginas de texto)

📌 Para que serve este Tipo SQL:

Armazenar textos longos de vários parágrafos sem poluir a linha principal da tabela.

📍 Onde posso usar:

  • • Descrição detalhada de um produto no e-commerce
  • • Comentários de clientes, avaliações ou mensagens de suporte
  • • Biografia de usuário, prontuário médico ou observações de pedido

⚖️ O que muda se eu escolher este?

Se o texto passar de 64 KB (ex: um artigo imenso com HTML pesado), o MySQL vai cortar ou recusar o INSERT! Se puder passar de 64 KB, mude para MEDIUMTEXT.

🐘 PHP PDO: Envie como string normal via PDO::PARAM_STR. Para buscas por palavra dentro do TEXT, crie um índice FULLTEXT.
Ver código SQL/PHP →
MEDIUMTEXT 📐 DrawDB: MEDIUMTEXT | Size: vazio
💾 Até 16.777.215 bytes (~16 MB de texto)

📌 Para que serve este Tipo SQL:

Armazenar conteúdos editoriais extensos, páginas completas de blog em HTML/Markdown ou templates de documentos.

📍 Onde posso usar:

  • • Corpo completo de notícias, artigos de blog e apostilas em HTML/Markdown
  • • Termos de uso, contratos jurídicos completos
  • • Logs detalhados de erro ou respostas de API externas em texto

⚖️ O que muda se eu escolher este?

Muda o teto de 64 KB (do TEXT comum) para 16 Megabytes, custando apenas 1 byte a mais no cabeçalho do campo (3 bytes em vez de 2). É o tipo ideal para CMS e Blogs!

🐘 PHP PDO: Perfeito para editores ricos (TipTap, Quill, TinyMCE, Markdown) no PHP.
Ver código SQL/PHP →
LONGTEXT 📐 DrawDB: LONGTEXT | Size: vazio
💾 Até 4.294.967.295 bytes (~4 GB de texto)

📌 Para que serve este Tipo SQL:

Capacidade extrema de texto para livros inteiros, transcrições massivas ou dumps de dados.

📍 Onde posso usar:

  • • Acervos literários completos, código-fonte de projetos inteiros ou arquivos XML/CSV gigantes guardados para processamento.

⚖️ O que muda se eu escolher este?

Suporta até 4 GB por célula, mas cuidado no PHP: ler uma coluna LONGTEXT de centenas de megabytes com fetch() comum pode estourar o `memory_limit` do PHP!

🐘 PHP PDO: Evite selecionar colunas LONGTEXT em listagens (faça SELECT apenas das colunas necessárias na tabela).
Ver código SQL/PHP →