Guia Completo de Decisão (A vs B vs C)
⚡ Abrir Lista Compacta de Todos os Comandos & Tipos →

Todos os Tipos SQL: Para que servem, Onde usar e O que muda entre A, B ou C

Consulte todos os tipos de campos do banco de dados organizados por categoria funcional. Entenda exatamente para que serve cada tipo, onde aplicar no seu projeto e o que muda na prática se você escolher o tipo A, B ou C na hora de desenhar no DrawDB e programar em PHP.

4. Datas, Horários e Auditoria de Tempo

Para datas de nascimento, vencimentos, horários de expediente, agendamentos e logs (created_at).

5 Tipos SQL nesta categoria

⚖️ O que muda se eu usar (A) DATE, (B) DATETIME, (C) TIMESTAMP ou (D) TIME?

Comparativo de Impacto Real (A vs B vs C)
A YYYY-MM-DD (3 Bytes)

Opção A: Usar DATE (Só Ano-Mês-Dia)

🔄 O que muda no banco: Guarda exclusivamente o dia do calendário (`2026-10-19`), descartando horas, minutos e fusos horários.
✅ Vantagem: Não sofre distorção de fuso horário (um aniversário ou vencimento de boleto é o mesmo dia em qualquer lugar) e facilita filtrar por dia (`WHERE data_vencimento = CURDATE()`).
⚠️ Cuidado / Limitação: Você não sabe a que horas o registro ocorreu.
🎯 Use para data de nascimento, vencimento de faturas, feriados e admissão.
B YYYY-MM-DD HH:MM:SS (Ano 1000 a 9999)

Opção B: Usar DATETIME (Data + Hora Fixa Civil)

🔄 O que muda no banco: Guarda a data e a hora exatas como uma "fotografia do relógio de parede", sem converter fuso horário, suportando anos de 1000 até 9999.
✅ Vantagem: Nunca muda se o servidor trocar de timezone e não tem o limite do ano 2038 no MySQL para prazos longos (como contratos de 30 anos).
⚠️ Cuidado / Limitação: Gasta 5 a 8 bytes e não converte automaticamente para o fuso horário de usuários em outros países.
🎯 Use para agendamentos futuros (consultas médicas, voos, eventos) e prazos após 2038.
C Auditoria: criado_em / atualizado_em

Opção C: Usar TIMESTAMP (Carimbo de Tempo Universal UTC)

🔄 O que muda no banco: Converte a data/hora enviada para UTC ao gravar no disco e converte de volta para o fuso atual ao fazer SELECT. Ocupa apenas 4 bytes no MySQL.
✅ Vantagem: Perfeito para saber o instante exato no tempo em que algo aconteceu no sistema (`DEFAULT CURRENT_TIMESTAMP`).
⚠️ Cuidado / Limitação: No MySQL, o tipo TIMESTAMP tradicional vai apenas de 1970 até 19/01/2038 (por isso nunca use TIMESTAMP para data de nascimento ou contratos de longo prazo!). No PostgreSQL (`TIMESTAMPTZ`), não existe esse limite.
🎯 Use para colunas de auditoria do sistema: `criado_em`, `atualizado_em`, `deletado_em`, `pago_em`.
DATE 📐 DrawDB: DATE | Size: vazio
💾 3 Bytes — Formato ISO: YYYY-MM-DD (de 1000-01-01 a 9999-12-31)

📌 Para que serve este Tipo SQL:

Registrar datas civis sem horário.

📍 Onde posso usar:

  • • Data de nascimento (`data_nascimento DATE`)
  • • Data de vencimento de boleto/fatura (`data_vencimento DATE`)
  • • Data de emissão contábil ou início de contrato

⚖️ O que muda se eu escolher este?

Ao contrário de salvar em VARCHAR("19/10/2026"), o tipo DATE permite ordenar do mais antigo para o mais novo (`ORDER BY data_vencimento ASC`) e somar dias (`DATE_ADD`).

🐘 PHP PDO: Salve sempre como Y-m-d e exiba na tela com DateTimeImmutable::createFromFormat('Y-m-d', $val)->format('d/m/Y').
Ver código SQL/PHP →
TIME 📐 DrawDB: TIME | Size: vazio
💾 3 Bytes — Formato: HH:MM:SS

📌 Para que serve este Tipo SQL:

Guardar apenas o horário do relógio (sem dia/mês/ano) ou um intervalo de duração.

📍 Onde posso usar:

  • • Horário de abertura e fechamento de uma loja (`08:00:00` às `18:00:00`)
  • • Horário fixo de início de uma aula ou turno de trabalho

⚖️ O que muda se eu escolher este?

Permite consultar facilmente "quais lojas estão abertas agora" comparando `CURTIME() BETWEEN abre_as AND fecha_as`.

🐘 PHP PDO: Envie no formato H:i:s (ex: "14:30:00") com PDO::PARAM_STR.
Ver código SQL/PHP →
DATETIME 📐 DrawDB: DATETIME | Size: vazio
💾 5 a 8 Bytes — De 1000-01-01 00:00:00 a 9999-12-31 23:59:59

📌 Para que serve este Tipo SQL:

Registrar data e hora completas sem conversão de fuso horário e sem limite de ano 2038.

📍 Onde posso usar:

  • • Data e hora de agendamentos (`data_hora_consulta DATETIME`)
  • • Início e fim de promoções, eventos ou validade de certificados longos

⚖️ O que muda se eu escolher este?

Guarda exatamente a data/hora enviada pelo PHP, independentemente do timezone configurado no servidor MySQL.

🐘 PHP PDO: Configure date_default_timezone_set('America/Sao_Paulo') no PHP e formate com format('Y-m-d H:i:s').
Ver código SQL/PHP →
TIMESTAMP 📐 DrawDB: TIMESTAMP | Default: CURRENT_TIMESTAMP
💾 4 Bytes (MySQL) / 8 Bytes (PostgreSQL TIMESTAMPTZ)

📌 Para que serve este Tipo SQL:

Carimbo de tempo automático de quando um registro foi criado, alterado ou excluído.

📍 Onde posso usar:

  • • Auditoria automática: `criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP`
  • • Última alteração: `atualizado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`
  • • Exclusão lógica (Soft Delete): `deletado_em TIMESTAMP NULL`

⚖️ O que muda se eu escolher este?

Converte para UTC internamente e é mais leve (4 bytes), mas no MySQL não aceita datas antes de 1970 nem depois de 2038.

🐘 PHP PDO: Deixe o próprio banco preencher no INSERT usando DEFAULT CURRENT_TIMESTAMP!
Ver código SQL/PHP →
YEAR 📐 DrawDB: YEAR (MySQL) ou SMALLINT
💾 1 Byte (Anos de 1901 a 2155)

📌 Para que serve este Tipo SQL:

Guardar exclusivamente um número de ano com 4 dígitos gastando apenas 1 byte.

📍 Onde posso usar:

  • • Ano de exercício fiscal, ano letivo escolar ou ano de fabricação (entre 1901 e 2155).

⚖️ O que muda se eu escolher este?

Economiza 1 byte em relação ao SMALLINT, mas só existe no MySQL/MariaDB e só vai de 1901 a 2155. Se precisar de anos antigos (ex: 1850) ou usar PostgreSQL, use SMALLINT.

🐘 PHP PDO: Envie como inteiro de 4 dígitos (ex: 2026).
Ver código SQL/PHP →