5. Textos Longos & Conteúdo
TEXT / MEDIUMTEXT / LONGTEXT
Campos para textos extensos como descrições detalhadas, artigos de blog, contratos e logs.
💾 Espaço em Disco: TEXT: até 64 KB | MEDIUMTEXT: até 16 MB | LONGTEXT: até 4 GB
📏 Limites: TINYTEXT: 255 B | TEXT: 65.535 B (~64 KB) | MEDIUMTEXT: 16,7 MB | LONGTEXT: 4,2 GB
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.
✅ Quando Usar
- •`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
- •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`).
📐 Configuração no DrawDB
- Type:
- TEXT (ou MEDIUMTEXT / LONGTEXT)
- Size / Values:
- Vazio
- Default:
- Deixe vazio (ou NULL se o campo for opcional)
MySQL / MariaDB
TEXT, MEDIUMTEXT ou LONGTEXT
PostgreSQL
TEXT (suporta até 1 GB automaticamente sem precisar de MEDIUM/LONG)
SQLite
TEXT
🗄️ SQL DDL (Pronto para Importar no DrawDB)
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)
);
🐘 Exemplo Prático em 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();