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.
✅ 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 ↗
TINYINT UNSIGNED
SMALLINT (2 bytes)
INTEGER
📋 Exemplos Reais de Colunas com TINYINT:
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)
);
<?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();