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();