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.

7. Estruturas Flexíveis & JSON 1 tipo

Armazenamento de objetos, arrays e metadados dinâmicos validados diretamente pelo banco de dados com suporte a buscas internas.

JSON / JSONB (Documentos Estruturados)

⭐ Essencial 💾 Aproximadamente o tamanho de um LONGBLOB/LONGTEXT (até 1 GB no Postgres / 4 GB no MySQL)

Armazena objetos e arrays JSON validados automaticamente e consultáveis via SQL.

O tipo nativo `JSON` (MySQL 5.7.8+ / MariaDB) e `JSONB` (PostgreSQL) valida automaticamente se a string enviada é um JSON válido e a armazena em um formato binário otimizado que permite buscar chaves específicas (`JSON_EXTRACT` ou operador `->`) sem precisar ler e fazer parse do texto inteiro.

Limites de Capacidade: Documentos JSON válidos (objetos `{}` ou arrays `[]`)

✅ Quando Usar (Casos Ideais)

  • • Atributos dinâmicos de produtos de categorias muito diferentes (ex: ficha técnica de uma Camiseta vs Placa de Vídeo).
  • • Preferências e configurações de interface do usuário (tema escuro, notificações, idioma).
  • • Payloads brutos de Webhooks (Stripe, Mercado Pago, Asaas) e snapshots de auditoria (antes/depois da edição).

🚫 Quando NÃO Usar (Armadilhas)

  • • NÃO use JSON como muleta para evitar criar tabelas e relacionamentos normais! Nunca guarde chaves estrangeiras dentro de um array JSON (`"produtos_ids": [1, 5, 9]`) — crie uma tabela associativa!

📐 Como Configurar no DrawDB Abrir DrawDB ↗

Type no DrawDB: JSON (ou JSONB no PostgreSQL)
Size / Values: Vazio
Default sugerido: Deixe vazio ou NULL
Equivalência nos Dialetos do DrawDB:
MySQL / MariaDB JSON
PostgreSQL JSONB (Binário indexável recomendado) ou JSON
SQLite TEXT (com funções da extensão JSON1 nativas)

📋 Exemplos Reais de Colunas com JSON:

especificacoes_tecnicas
JSON NULL
Atributos variáveis do produto (voltagem, memória, cor)
configuracoes
JSON NOT NULL
Preferências customizadas do usuário
🗄️ SQL DDL (Importar no DrawDB: Import > SQL)
CREATE TABLE produtos_catalogo (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(150) NOT NULL,
    preco DECIMAL(10, 2) NOT NULL,
    atributos_extras JSON NULL COMMENT 'Ex: {"voltagem": "220v", "garantia_meses": 12}'
);
🐘 Como Validar e Salvar no PHP 8 + PDO
<?php
declare(strict_types=1);

// 1. Codificando array associativo do PHP para JSON com tratamento de erro nativo (JSON_THROW_ON_ERROR)
$atributos = [
    'processador' => 'Ryzen 7',
    'memoria_ram_gb' => 32,
    'conexoes' => ['HDMI 2.1', 'USB-C', 'Wi-Fi 6E'],
];

$jsonString = json_encode($atributos, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);

$stmt = $pdo->prepare('
    INSERT INTO produtos_catalogo (nome, preco, atributos_extras)
    VALUES (:nome, :preco, :atributos)
');
$stmt->bindValue(':nome', 'Notebook Pro 16', PDO::PARAM_STR);
$stmt->bindValue(':preco', '7499.90', PDO::PARAM_STR);
$stmt->bindValue(':atributos', $jsonString, PDO::PARAM_STR);
$stmt->execute();

// 2. Lendo do banco e decodificando de volta para Array PHP
$dadosAtributos = json_decode($jsonString, true, 512, JSON_THROW_ON_ERROR);
echo $dadosAtributos['processador']; // "Ryzen 7"