← Voltar para 2. Numéricos Inteiros
2. Numéricos Inteiros

TINYINT / TINYINT UNSIGNED

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

💾 Espaço em Disco: 1 Byte (8 bits) 📏 Limites: Unsigned: 0 a 255 | Signed: -128 a 127

É 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

  • •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

  • •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).

📐 Configuração no DrawDB

Type:
TINYINT (MySQL/MariaDB) ou SMALLINT (PostgreSQL)
Size / Values:
Vazio
Default:
Ex: 0 ou 1
MySQL / MariaDB
TINYINT UNSIGNED
PostgreSQL
SMALLINT (2 bytes)
SQLite
INTEGER
🗄️ SQL DDL (Pronto para Importar no DrawDB)
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)
);
🐘 Exemplo Prático em 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();