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.

✕

6. Datas, Horários & Auditoria 1 tipo

Registro de datas de nascimento, agendamentos, horários de funcionamento e carimbos de auditoria (created_at, updated_at).

TIME & YEAR (Hora Isolada e Ano)

💾 TIME: 3 Bytes | YEAR: 1 Byte

TIME armazena horários do dia ou durações (HH:MM:SS); YEAR armazena um ano em 1 Byte.

O tipo `TIME` (3 bytes) é ideal para horários recorrentes que independem de um dia específico, como horário de abertura e fechamento de uma loja (`08:00:00` às `18:00:00`). Já o tipo `YEAR` no MySQL ocupa apenas 1 byte para anos entre 1901 e 2155.

Limites de Capacidade: TIME: -838:59:59 a 838:59:59 | YEAR: 1901 a 2155

✅ Quando Usar (Casos Ideais)

  • • Horário comercial de abertura e fechamento (`abre_as TIME`, `fecha_as TIME`).
  • • Horário de início de uma turma escolar (`horario_aula TIME`).

🚫 Quando NÃO Usar (Armadilhas)

  • • Para anos fora da faixa de 1901 a 2155 (use `SMALLINT` em vez de `YEAR` para maior compatibilidade com PostgreSQL e SQLite).

📐 Como Configurar no DrawDB Abrir DrawDB ↗

Type no DrawDB: TIME
Size / Values: Vazio
Default sugerido: Ex: 08:00:00
Equivalência nos Dialetos do DrawDB:
MySQL / MariaDB TIME
PostgreSQL TIME
SQLite TEXT

📋 Exemplos Reais de Colunas com TIME:

horario_abertura
TIME NOT NULL
Hora em que a loja abre (ex: 08:30:00)
horario_fechamento
TIME NOT NULL
Hora em que a loja fecha (ex: 18:00:00)
🗄️ SQL DDL (Importar no DrawDB: Import > SQL)
CREATE TABLE horarios_funcionamento (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    dia_semana TINYINT UNSIGNED NOT NULL COMMENT '1=Dom, 2=Seg ... 7=Sab',
    horario_abertura TIME NOT NULL,
    horario_fechamento TIME NOT NULL
);
🐘 Como Validar e Salvar no PHP 8 + PDO
<?php
declare(strict_types=1);

$abertura   = '08:30:00';
$fechamento = '18:00:00';

if (!preg_match('/^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/', $abertura)) {
    throw new InvalidArgumentException('Horário inválido.');
}

$stmt = $pdo->prepare('
    INSERT INTO horarios_funcionamento (dia_semana, horario_abertura, horario_fechamento)
    VALUES (:dia, :abre, :fecha)
');
$stmt->bindValue(':dia', 2, PDO::PARAM_INT); // Segunda-feira
$stmt->bindValue(':abre', $abertura, PDO::PARAM_STR);
$stmt->bindValue(':fecha', $fechamento, PDO::PARAM_STR);
$stmt->execute();