9. Booleanos & Flags
BOOLEAN / TINYINT(1) (Verdadeiro ou Falso)
Armazena estados binários Verdadeiro (1 / true) ou Falso (0 / false) como ativo, pago ou verificado.
💾 Espaço em Disco: 1 Byte
📏 Limites: 0 (False) ou 1 (True) — mais NULL se a coluna for nullable
No MySQL e MariaDB, a palavra-chave `BOOLEAN` (ou `BOOL`) é um apelido (alias) para `TINYINT(1)`, onde `0` representa `false` e `1` representa `true`. No PostgreSQL, `BOOLEAN` é um tipo dedicado que aceita `TRUE` e `FALSE`. Dica de modelagem: se você precisa saber QUANDO a flag virou verdadeira (ex: quando o e-mail foi verificado), em vez de `email_verificado BOOLEAN`, crie `email_verificado_em TIMESTAMP NULL`!
✅ Quando Usar
- •Flags de controle simples: `ativo`, `destaque_home`, `aceitou_termos`, `frete_gratis`.
- •Configurações de liga/desliga.
🚫 Quando NÃO Usar
- •Nunca use `VARCHAR(3)` escrevendo `"SIM"` e `"NAO"` ou `CHAR(1)` com `"S"` e `"N"`! Use sempre `BOOLEAN` / `TINYINT(1)` com `0` e `1`.
📐 Configuração no DrawDB
- Type:
- BOOLEAN (ou TINYINT no MySQL)
- Size / Values:
- 1 (se selecionar TINYINT) ou vazio (se selecionar BOOLEAN)
- Default:
- 1 (true) ou 0 (false)
MySQL / MariaDB
BOOLEAN NOT NULL DEFAULT 1 (ou TINYINT(1))
PostgreSQL
BOOLEAN NOT NULL DEFAULT TRUE
SQLite
INTEGER NOT NULL DEFAULT 1 (0 ou 1)
🗄️ SQL DDL (Pronto para Importar no DrawDB)
CREATE TABLE cupons_desconto (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
codigo VARCHAR(30) NOT NULL UNIQUE,
ativo BOOLEAN NOT NULL DEFAULT 1,
uso_unico BOOLEAN NOT NULL DEFAULT 0
);
🐘 Exemplo Prático em PHP 8 + PDO
<?php
declare(strict_types=1);
$ativo = true;
$usoUnico = false;
// Nota importante no PDO + MySQL: converter bool para int (1 ou 0) com PDO::PARAM_INT
// evita incompatibilidades de driver em modo estrito do MySQL.
$stmt = $pdo->prepare('
INSERT INTO cupons_desconto (codigo, ativo, uso_unico)
VALUES (:codigo, :ativo, :uso_unico)
');
$stmt->bindValue(':codigo', 'BEMVINDO10', PDO::PARAM_STR);
$stmt->bindValue(':ativo', $ativo ? 1 : 0, PDO::PARAM_INT);
$stmt->bindValue(':uso_unico', $usoUnico ? 1 : 0, PDO::PARAM_INT);
$stmt->execute();
// Ao ler do banco no PHP, faça o cast explícito para (bool):
$cupomAtivo = (bool) 1; // true