È necessario essere in MySQL versione 5.6.4 o successiva per dichiarare colonne con tipi di dati di tempo frazionario di secondo. Non sei sicuro di avere la versione giusta? Prova SELECT NOW(3)
. Se ricevi un errore, non hai la versione giusta.
Ad esempio, DATETIME(3)
ti darà una risoluzione in millisecondi nei tuoi timestamp e TIMESTAMP(6)
ti darà una risoluzione di microsecondi su un timestamp *stile nix.
Leggi questo:https://dev.mysql.com/ doc/refman/8.0/en/fractional-seconds.html
NOW(3)
ti darà l'ora presente dal sistema operativo del tuo server MySQL con precisione al millisecondo.
Se hai un numero di millisecondi dall'Epoca Unix , prova questo per ottenere un valore DATETIME(3)
FROM_UNIXTIME(ms * 0.001)
Timestamp JavaScript , ad esempio, sono rappresentati in millisecondi da Epoca Unix .
(Nota che l'aritmetica frazionaria interna di MySQL, come * 0.001
, viene sempre gestito come virgola mobile a doppia precisione IEEE754, quindi è improbabile che perda la precisione prima che il Sole diventi una nana bianca.)
Se stai utilizzando una versione precedente di MySQL e hai bisogno di una precisione temporale inferiore al secondo, il tuo percorso migliore è l'aggiornamento. Qualsiasi altra cosa ti costringerà a fare soluzioni disordinate.
Se, per qualche motivo, non riesci a eseguire l'upgrade, potresti prendere in considerazione l'utilizzo di BIGINT
o DOUBLE
colonne per memorizzare i timestamp Javascript come se fossero numeri. FROM_UNIXTIME(col * 0.001)
funzionerà ancora bene. Se hai bisogno dell'ora corrente da memorizzare in una tale colonna, puoi usare UNIX_TIMESTAMP() * 1000