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.
5. Booleanos, Listas de Opções (ENUM/SET) e Documentos JSON
Para flags de verdadeiro/falso, status de pedidos, níveis de acesso e configurações flexíveis.
⚖️ O que muda se eu usar (A) ENUM, (B) VARCHAR com Enum no PHP ou (C) Tabela Separada (FK)?
Comparativo de Impacto Real (A vs B vs C)Opção A: Usar ENUM no Banco
Opção B: Usar VARCHAR(30) + BackedEnum no PHP 8
Opção C: Criar uma Tabela Separada com Foreign Key
📌 Para que serve este Tipo SQL:
Guardar respostas de Sim/Não, Ativo/Inativo, Ligado/Desligado.
📍 Onde posso usar:
- • Cadastro ativo (`ativo BOOLEAN NOT NULL DEFAULT 1`)
- • Produto em destaque (`destaque BOOLEAN NOT NULL DEFAULT 0`)
- • Frete grátis (`frete_gratis BOOLEAN NOT NULL DEFAULT 0`)
⚖️ O que muda se eu escolher este?
Ocupa apenas 1 byte e torna os filtros no PHP super limpos. Dica: se além de saber SE foi feito você precisar saber QUANDO foi feito (ex: e-mail verificado), troque `email_verificado BOOLEAN` por `email_verificado_em TIMESTAMP NULL`!
📌 Para que serve este Tipo SQL:
Armazenar máscaras de bits puras (flags binárias compactadas).
📍 Onde posso usar:
- • Sistemas legados ou máscaras de permissões binárias (b'0101').
⚖️ O que muda se eu escolher este?
Se escolher `BIT(1)` em vez de `BOOLEAN`/`TINYINT(1)` no MySQL, o PDO em PHP pode retornar o valor como um caractere binário invisível (`"\x00"` ou `"\x01"`), causando bugs em `if ($row['ativo'])`! Por isso, prefira sempre `BOOLEAN` / `TINYINT(1)` no MySQL.
📌 Para que serve este Tipo SQL:
Permitir que a coluna receba exatamente UM valor dentre uma lista fechada.
📍 Onde posso usar:
- • Status de pedido: ENUM('pendente', 'pago', 'enviado', 'cancelado')
- • Tipo de pessoa: ENUM('PF', 'PJ')
- • Método de pagamento: ENUM('pix', 'cartao', 'boleto')
⚖️ O que muda se eu escolher este?
O banco valida automaticamente a opção enviada e economiza espaço gravando apenas o índice numérico internamente.
📌 Para que serve este Tipo SQL:
Permitir escolher ZERO, UM ou VÁRIOS valores ao mesmo tempo de uma lista pré-definida.
📍 Onde posso usar:
- • Dias da semana de um alarme ou características simples fixas.
⚖️ O que muda se eu escolher este?
Difícil de filtrar individualmente e só existe no MySQL. Na prática moderna, é muito melhor usar uma coluna `JSON` (ex: `["seg", "qua"]`) ou uma tabela relacional N:N!
📌 Para que serve este Tipo SQL:
Guardar arrays, objetos aninhados e atributos variáveis sem precisar criar dezenas de colunas vazias.
📍 Onde posso usar:
- • Ficha técnica variável de produtos (ex: especificações de celular vs roupa)
- • Preferências de interface do usuário, logs de auditoria (valores antigos vs novos)
- • Retorno bruto de gateways de pagamento (Webhooks)
⚖️ O que muda se eu escolher este?
Se escolher `JSON` em vez de `TEXT`, o banco impede salvar um JSON com erro de sintaxe e permite consultar campos internos direto no SQL (`WHERE atributos->>"$.voltagem" = "220v"`). Mas nunca use JSON para guardar chaves estrangeiras!