Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual a melhor forma de armazenar data/hora no MySql?


  1. 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 e TIMESTAMP .

    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 o time_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.

  2. Assim como você declara qualquer outra coluna, você especifica o tipo de dados relevante após o nome da coluna.

    Esteja ciente de que TIMESTAMP tem recursos adicionais, como atualização automática , que você pode desabilitar em sua declaração de coluna, se desejar.

  3. Usando um dos tipos temporais acima, você poderá fazer tudo isso (usando funções de data como requerido). A saída padrão de TIMESTAMP e DATETIME 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 o TIMEDIFF() função:
    SELECT TIMEDIFF(end, start) AS elapsed
    FROM   my_table
    WHERE  ...