Apenas uma pergunta rápida sobre o armazenamento de "tempo" em um banco de dados. Estou registrando o tempo das execuções dos usuários no formato 00: 00: 00: 00 (horas, minutos, segundos, milissegundos).
Originalmente, eu ia armazená-lo, TIME
mas percebi que o MySQL não suporta milissegundos nesse tipo.
Armazenarei o tempo real do cronômetro dos usuários, não o tempo em que eles foram executados e finalizados (isso será calculado antes de ser inserido).
Qual seria o melhor tipo de campo a ser usado? Eu estava pensando em um double
ou outro float
, mas não tenho certeza se isso funcionaria?
fonte
interval
tipo de dados SQL padrão para esse fim. Mas nem todos os DBMS (e definitivamente não o MySQL) suportam isso.Depende de quanto tempo você deseja medir. Se você não estiver gravando mais de 2 ^ 32 ou 4294967296 ms do que um int não assinado normal, tudo bem. Isso corresponde a cerca de 50 dias de tempo, btw.
Se você estava armazenando carimbos de data / hora unix ou intervalos maiores, veja usando bigint. Isso fornece 8 bytes de espaço, ou a capacidade de registrar tempos de 1.84467440737096e + 19 ms (aproximadamente 500 milhões de anos)
fonte
Se você usa o MySQL 5.6.4 ou posterior, você pode usar a
TIME(3)
,DATETIME(3)
eTIMESTAMP(3)
tipos de colunas para armazenar até 6 dígitos fracionários (substitua3
com o número de dígitos fracionários que você precisa). A parte fracionária é adicionada à sequência de tempo após ponto; exemplo:2018-09-08 17:51:04.781
.Referência oficial
fonte