← Voltar para 9. Booleanos & Flags
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