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.

✕

2. Numéricos Inteiros 1 tipo

Números sem casas decimais para contagens, quantidades em estoque, idades, ordenação e códigos numéricos.

TINYINT / TINYINT UNSIGNED

⭐ Essencial 💾 1 Byte (8 bits)

Inteiro super compacto de 1 Byte (0 a 255 sem sinal, ou -128 a 127 com sinal).

É o menor tipo numérico inteiro do banco de dados, consumindo apenas 1 byte por linha. Excelente para armazenar números pequenos cujos limites são bem conhecidos, como idade de uma pessoa, dia do mês (1 a 31), nota de avaliação (1 a 5 estrelas), número de parcelas de cartão (1 a 24) ou códigos de status.

Limites de Capacidade: Unsigned: 0 a 255 | Signed: -128 a 127

✅ Quando Usar (Casos Ideais)

  • • Idade de usuários (0 a 150 anos cabe com folga em `TINYINT UNSIGNED`).
  • • Avaliações/Ratings de produtos (1 a 5 estrelas ou 0 a 10).
  • • Mês do ano (1 a 12), dia da semana (1 a 7), número de parcelas (1 a 48).
  • • Prioridade ou nível de permissão numérico simples.

🚫 Quando NÃO Usar (Armadilhas)

  • • Quantidades de estoque ou contadores de visualizações que podem facilmente passar de 255.
  • • No PostgreSQL não existe `TINYINT` nativo (use `SMALLINT` no Postgres).

📐 Como Configurar no DrawDB Abrir DrawDB ↗

Type no DrawDB: TINYINT (MySQL/MariaDB) ou SMALLINT (PostgreSQL)
Size / Values: Vazio
Default sugerido: Ex: 0 ou 1
Equivalência nos Dialetos do DrawDB:
MySQL / MariaDB TINYINT UNSIGNED
PostgreSQL SMALLINT (2 bytes)
SQLite INTEGER

📋 Exemplos Reais de Colunas com TINYINT:

idade
TINYINT UNSIGNED NULL
Idade do cliente (0 a 255)
estrelas
TINYINT UNSIGNED NOT NULL
Nota da avaliação de 1 a 5
parcelas
TINYINT UNSIGNED NOT NULL DEFAULT 1
Quantidade de parcelas do pagamento
🗄️ SQL DDL (Importar no DrawDB: Import > SQL)
CREATE TABLE avaliacoes_produto (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    produto_id INT UNSIGNED NOT NULL,
    estrelas TINYINT UNSIGNED NOT NULL COMMENT 'Nota de 1 a 5',
    comentario VARCHAR(500) NULL,
    CONSTRAINT chk_estrelas CHECK (estrelas BETWEEN 1 AND 5)
);
🐘 Como Validar e Salvar no PHP 8 + PDO
<?php
declare(strict_types=1);

$estrelas = filter_input(INPUT_POST, 'estrelas', FILTER_VALIDATE_INT, [
    'options' => ['min_range' => 1, 'max_range' => 5]
]);

if ($estrelas === false || $estrelas === null) {
    throw new DomainException('A nota deve ser um número inteiro entre 1 e 5.');
}

$stmt = $pdo->prepare('
    INSERT INTO avaliacoes_produto (produto_id, estrelas, comentario)
    VALUES (:produto_id, :estrelas, :comentario)
');
$stmt->bindValue(':produto_id', 42, PDO::PARAM_INT);
$stmt->bindValue(':estrelas', $estrelas, PDO::PARAM_INT);
$stmt->bindValue(':comentario', 'Excelente produto!', PDO::PARAM_STR);
$stmt->execute();

9. Booleanos & Flags 1 tipo

Estados binários de verdadeiro/falso (ativo/inativo, pago/pendente, verificado/não verificado).

BOOLEAN / TINYINT(1) (Verdadeiro ou Falso)

⭐ Essencial 💾 1 Byte

Armazena 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`!

Limites de Capacidade: 0 (False) ou 1 (True) — mais NULL se a coluna for nullable

✅ 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 ↗

Type no DrawDB: BOOLEAN (ou TINYINT no MySQL)
Size / Values: 1 (se selecionar TINYINT) ou vazio (se selecionar BOOLEAN)
Default sugerido: 1 (true) ou 0 (false)
Equivalência nos Dialetos do DrawDB:
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)

📋 Exemplos Reais de Colunas com BOOLEAN:

ativo
BOOLEAN NOT NULL DEFAULT 1
Indica se o cadastro está ativo no sistema
em_destaque
BOOLEAN NOT NULL DEFAULT 0
Exibir produto na vitrine principal
🗄️ SQL DDL (Importar no DrawDB: Import > SQL)
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
);
🐘 Como Validar e Salvar no 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