-
Normalmente, você não deve fazer nenhum dos dois:os tipos de dados na camada de banco de dados devem ser significativos (o máximo possível) por conta própria e não depender de seu aplicativo para interpretá-los. Como @Jim DeLaHunt diz , isso permite que o banco de dados os manipule/interprete facilmente do SQL conforme necessário (e também permite que você acesse facilmente os mesmos dados de outra base de código do aplicativo no futuro).
O MySQL tem cinco tipos temporais , apenas dois dos quais armazenam uma data e uma hora:DATETIME
eTIMESTAMP
.
Como outros aludiram, a diferença se resume a se você deseja armazenar o fuso horário - embora eu ache essa maneira bastante confusa de vê-lo:
-
TIMESTAMP
usa otime_zone
da sessão variável para converter a entrada em um timestamp UTC e depois voltar novamente para a saída:é útil para especificar um momento exato no tempo;
-
DATETIME
simplesmente armazena a data e a hora sem considerar o fuso horário, assim como tirar uma fotografia de um calendário e relógio:é útil para especificar um evento que ocorre no mesmo horário local globalmente.
-
-
Assim como você declara qualquer outra coluna, você especifica o tipo de dados relevante após o nome da coluna.
Esteja ciente de queTIMESTAMP
tem recursos adicionais, como atualização automática , que você pode desabilitar em sua declaração de coluna, se desejar.
-
Usando um dos tipos temporais acima, você poderá fazer tudo isso (usando funções de data como requerido). A saída padrão deTIMESTAMP
eDATETIME
tipos é uma string em'YYYY-MM-DD HH:MM:SS'
formato.
Em particular, o "tempo decorrido" da comparação de dois valores pode, por exemplo, ser obtido com oTIMEDIFF()
função:
SELECT TIMEDIFF(end, start) AS elapsed FROM my_table WHERE ...