Referência Completa de Tipos de Dados SQL

Manual de Todos os Campos do Banco de Dados

Explore cada tipo de campo (VARCHAR, CHAR, INT, DECIMAL, TIMESTAMP, JSON, ENUM...) agrupado por funcionalidade, como configurar no DrawDB e como validar e gravar com PHP 8 + PDO.

5. Textos Longos & Conteúdo 1 tipo

Campos dimensionados para grandes volumes de texto como artigos de blog, descrições de produtos, HTML, Markdown e logs.

TEXT / MEDIUMTEXT / LONGTEXT

⭐ Essencial 💾 TEXT: até 64 KB | MEDIUMTEXT: até 16 MB | LONGTEXT: até 4 GB

Campos para textos extensos como descrições detalhadas, artigos de blog, contratos e logs.

Os tipos da família TEXT são armazenados fora da estrutura principal da linha no banco de dados (off-page storage no InnoDB), deixando na linha apenas um ponteiro de 20 bytes. Isso permite guardar textos imensos sem estourar o limite de 64 KB por linha das tabelas relacionais.

Limites de Capacidade: TINYTEXT: 255 B | TEXT: 65.535 B (~64 KB) | MEDIUMTEXT: 16,7 MB | LONGTEXT: 4,2 GB

✅ Quando Usar (Casos Ideais)

  • • `TEXT` (até 64 KB): Descrições de produtos, biografias, comentários de usuários, observações de pedidos.
  • • `MEDIUMTEXT` (até 16 MB): Artigos completos de blog em HTML/Markdown, termos de uso, templates de e-mail.
  • • `LONGTEXT` (até 4 GB): Livros inteiros, dumps extensos ou payloads massivos de integrações.

🚫 Quando NÃO Usar (Armadilhas)

  • • Não use `TEXT` para campos curtos que serão frequentemente filtrados com `=` ou `ORDER BY` (como nome, e-mail, cidade) — use `VARCHAR`.
  • • No MySQL, colunas `TEXT` não aceitam valor `DEFAULT` literal direto em versões antigas e exigem prefixo ao criar índices normais (ou índice `FULLTEXT`).

📐 Como Configurar no DrawDB Abrir DrawDB ↗

Type no DrawDB: TEXT (ou MEDIUMTEXT / LONGTEXT)
Size / Values: Vazio
Default sugerido: Deixe vazio (ou NULL se o campo for opcional)
Equivalência nos Dialetos do DrawDB:
MySQL / MariaDB TEXT, MEDIUMTEXT ou LONGTEXT
PostgreSQL TEXT (suporta até 1 GB automaticamente sem precisar de MEDIUM/LONG)
SQLite TEXT

📋 Exemplos Reais de Colunas com TEXT:

descricao_completa
TEXT NULL
Ficha técnica e descrição de um produto
conteudo_markdown
MEDIUMTEXT NOT NULL
Corpo completo de um artigo ou aula
🗄️ SQL DDL (Importar no DrawDB: Import > SQL)
CREATE TABLE artigos_blog (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    titulo VARCHAR(180) NOT NULL,
    slug VARCHAR(200) NOT NULL UNIQUE,
    resumo VARCHAR(300) NOT NULL,
    conteudo_html MEDIUMTEXT NOT NULL,
    FULLTEXT INDEX idx_busca_artigo (titulo, resumo, conteudo_html)
);
🐘 Como Validar e Salvar no PHP 8 + PDO
<?php
declare(strict_types=1);

$titulo   = 'Guia Definitivo de Tipos de Dados no MySQL e PostgreSQL';
$slug     = 'guia-definitivo-tipos-dados-mysql-postgresql';
$resumo   = 'Aprenda quando usar VARCHAR, CHAR, TEXT, INT e DECIMAL com exemplos em PHP.';
$conteudo = "<p>Conteúdo longo do artigo...</p>";

$stmt = $pdo->prepare('
    INSERT INTO artigos_blog (titulo, slug, resumo, conteudo_html)
    VALUES (:titulo, :slug, :resumo, :conteudo)
');
$stmt->bindValue(':titulo', $titulo, PDO::PARAM_STR);
$stmt->bindValue(':slug', $slug, PDO::PARAM_STR);
$stmt->bindValue(':resumo', $resumo, PDO::PARAM_STR);
$stmt->bindValue(':conteudo', $conteudo, PDO::PARAM_STR);
$stmt->execute();