Devo usar um grande INT ou INT regular em MySQL para armazenar um timestamp?
-
19-09-2019 - |
Pergunta
Eu deveria estar usando um grande número inteiro ou um número inteiro regular em MySQL para armazenar um timerstamp em? Estou pensando em guardá-lo em um INT e não o construído em timestamp ou datetime tipo de modo que INT devo usar?
Solução
Int iria rolar para um valor negativo em 2038 (se você estiver usando UNIX timestamp): http: // en.wikipedia.org/wiki/2038_problem .
para BIGINT é provavelmente a escolha mais segura
Outras dicas
Você deve estar armazenando-o em um timestamp já que é mais provável que os DBMS irá otimizar para dados timestamp.
Estou curioso para saber por que você iria sacrificar todo o trabalho duro que os desenvolvedores do MySQL têm posto em fazer timestamps trabalhar do jeito que deveriam, e substituí-lo com algo que quase certamente não funcionar tão bem.
Desde que você não fazer estado por você quiser usar um inteiro, eu só estou indo supor que era insanidade temporária e que você vai recuperar em breve: -)
Eu acho que depende inteiramente o que você quer fazer. Há alguns tipos adequados para os tipos de data / hora (ver: http://dev.mysql.com/doc/refman/5.0/en/date-and-time-type-overview.html )
-
DATE
- tipicamente 3 bytes, intervalo:.1000-01-01
para9999-12-31
-
DATETIME
- 8 bytes, gama1000-01-01 00:00:00
para9999-12-31 23:59:59
-
TIMESTAMP
- 4 bytes variam UTC1970-01-01 00:00:01
a UTC2038-01-19 03:14:07
. Então, há algumas questões semânticas para estar ciente de:
(int é 4 bytes como timestamp, bigint é de 8 bytes como DATETIME)
- Data lojas de dias do calendário, data e hora e data e hora tanto store data + tempo em uma segunda precisão (precisão sub-segundo é suportado em data aritmética, mas não para armazenamento)
- lojas timestamp um valor de UTC. Ou seja, qualquer valor que você ficar lá é convertido de fuso horário da sessão (por padrão, fuso horário do servidor) para UTC e armazenados. Em recuperação, o valor UTC é convertido novamente para o fuso horário em vigor na sessão.
- timestamp podem ser declarados para obter automaticamente a hora atual na inserção ou atualização ou ambos. você melhor estudar o manual para os detalhes (ver http: //dev.mysql .com / doc / refman / 5.1 / en / timestamp.html )