DATE (Apenas Data: AAAA-MM-DD)
⭐ Essencial 💾 3 Bytes (MySQL) | 4 Bytes (PostgreSQL)Armazena somente ano, mês e dia (ex: 1995-08-24), sem horário nem fuso horário.
O tipo DATE ocupa apenas 3 bytes e utiliza o formato universal ISO 8601 (`YYYY-MM-DD`). É ideal para eventos civis que não dependem de hora nem sofrem alteração por fuso horário (uma pessoa nascida em 10/05/1990 continua tendo nascido em 10/05/1990 em qualquer país do mundo).
✅ Quando Usar (Casos Ideais)
- • Data de nascimento (`data_nascimento DATE`).
- • Data de vencimento de boleto/fatura (`data_vencimento DATE`).
- • Data de admissão, feriados ou início de vigência de contrato.
🚫 Quando NÃO Usar (Armadilhas)
- • Quando você precisa saber a hora e minuto exatos em que algo ocorreu (use `DATETIME` ou `TIMESTAMP`).
- • Nunca salve datas como `VARCHAR(10)` no formato `DD/MM/AAAA`! Isso impede o banco de ordenar por data (`ORDER BY`) ou calcular intervalos (`DATEDIFF`). Formate para `d/m/Y` apenas na tela com PHP!
📐 Como Configurar no DrawDB Abrir DrawDB ↗
DATE
DATE
TEXT (formato YYYY-MM-DD)
📋 Exemplos Reais de Colunas com DATE:
CREATE TABLE faturas (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cliente_id BIGINT UNSIGNED NOT NULL,
valor DECIMAL(10, 2) NOT NULL,
data_emissao DATE NOT NULL,
data_vencimento DATE NOT NULL
);
<?php
declare(strict_types=1);
// 1. Convertendo data brasileira (DD/MM/YYYY) para padrão do banco (YYYY-MM-DD) com DateTimeImmutable
$inputUsuario = '25/12/2026';
$dataVencimento = DateTimeImmutable::createFromFormat('!d/m/Y', $inputUsuario);
$erros = DateTimeImmutable::getLastErrors();
if (!$dataVencimento || ($erros !== false && ($erros['warning_count'] > 0 || $erros['error_count'] > 0))) {
throw new InvalidArgumentException('Data inválida.');
}
// 2. Salvando no banco no formato ISO Y-m-d
$stmt = $pdo->prepare('
INSERT INTO faturas (cliente_id, valor, data_emissao, data_vencimento)
VALUES (:cliente, :valor, :emissao, :vencimento)
');
$stmt->bindValue(':cliente', 10, PDO::PARAM_INT);
$stmt->bindValue(':valor', '250.00', PDO::PARAM_STR);
$stmt->bindValue(':emissao', (new DateTimeImmutable('today'))->format('Y-m-d'), PDO::PARAM_STR);
$stmt->bindValue(':vencimento', $dataVencimento->format('Y-m-d'), PDO::PARAM_STR);
$stmt->execute();
// 3. Ao exibir na tela em PHP:
echo 'Vencimento: ' . $dataVencimento->format('d/m/Y'); // 25/12/2026