BOOLEAN / TINYINT(1) (Verdadeiro ou Falso)
⭐ Essencial 💾 1 ByteArmazena estados binários Verdadeiro (1 / true) ou Falso (0 / false) como ativo, pago ou verificado.
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 (Casos Ideais)
- • Flags de controle simples: `ativo`, `destaque_home`, `aceitou_termos`, `frete_gratis`.
- • Configurações de liga/desliga.
🚫 Quando NÃO Usar (Armadilhas)
- • Nunca use `VARCHAR(3)` escrevendo `"SIM"` e `"NAO"` ou `CHAR(1)` com `"S"` e `"N"`! Use sempre `BOOLEAN` / `TINYINT(1)` com `0` e `1`.
📐 Como Configurar no DrawDB Abrir DrawDB ↗
BOOLEAN NOT NULL DEFAULT 1 (ou TINYINT(1))
BOOLEAN NOT NULL DEFAULT TRUE
INTEGER NOT NULL DEFAULT 1 (0 ou 1)
📋 Exemplos Reais de Colunas com BOOLEAN:
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
);
<?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