Você precisa estar no MySQL versão 5.6.4 ou posterior para declarar colunas com tipos de dados de tempo fracionários. Não tem certeza se você tem a versão correta? Tente
SELECT NOW(3)
. Se você receber um erro, você não tem a versão correta. Por exemplo,
DATETIME(3)
lhe dará resolução de milissegundos em seus timestamps e TIMESTAMP(6)
fornecerá resolução de microssegundos em um timestamp estilo *nix. Leia isto:https://dev.mysql.com/ doc/refman/8.0/en/fractional-seconds.html
NOW(3)
lhe dará a hora atual do sistema operacional do seu servidor MySQL com precisão de milissegundos. Se você tiver um número de milissegundos desde a época Unix , tente isso para obter um valor DATETIME(3)
FROM_UNIXTIME(ms * 0.001)
Timestamps JavaScript , por exemplo, são representados em milissegundos desde a Unix epoch .
(Observe que a aritmética fracionária interna do MySQL, como
* 0.001
, é sempre tratado como ponto flutuante de precisão dupla IEEE754, então é improvável que você perca a precisão antes que o Sol se torne uma estrela anã branca.) Se você estiver usando uma versão mais antiga do MySQL e precisar de precisão de tempo de subsegundos, seu melhor caminho é atualizar. Qualquer outra coisa o forçará a fazer soluções alternativas confusas.
Se, por algum motivo, você não puder atualizar, considere usar
BIGINT
ou DOUBLE
colunas para armazenar carimbos de data e hora Javascript como se fossem números. FROM_UNIXTIME(col * 0.001)
ainda vai funcionar bem. Se você precisar armazenar a hora atual em tal coluna, poderá usar UNIX_TIMESTAMP() * 1000