Aby deklarować kolumny z typami danych z ułamkiem sekundy, musisz mieć MySQL w wersji 5.6.4 lub nowszej. Nie jesteś pewien, czy masz odpowiednią wersję? Wypróbuj SELECT NOW(3)
. Jeśli pojawi się błąd, oznacza to, że nie masz odpowiedniej wersji.
Na przykład DATETIME(3)
da ci milisekundową rozdzielczość w twoich znacznikach czasu, a TIMESTAMP(6)
da ci rozdzielczość w mikrosekundach ze znacznikiem czasu w stylu *nix.
Przeczytaj to:https://dev.mysql.com/ doc/refman/8.0/en/fractional-seconds.html
NOW(3)
poda aktualny czas z systemu operacyjnego serwera MySQL z dokładnością do milisekund.
Jeśli minęło kilka milisekund od epoki Uniksa , spróbuj tego, aby uzyskać wartość DATETIME(3)
FROM_UNIXTIME(ms * 0.001)
sygnatury czasowe JavaScript , na przykład są przedstawiane w milisekundach od epoki Uniksa .
(Zauważ, że wewnętrzna arytmetyka ułamkowa MySQL, taka jak * 0.001
, jest zawsze traktowana jako zmiennoprzecinkowa podwójnej precyzji IEEE754, więc jest mało prawdopodobne, że utracisz precyzję, zanim Słońce stanie się białym karłem.)
Jeśli używasz starszej wersji MySQL i potrzebujesz dokładności w czasie poniżej sekundy, najlepszym rozwiązaniem jest uaktualnienie. Wszystko inne zmusi cię do robienia bałaganu.
Jeśli z jakiegoś powodu nie możesz uaktualnić, możesz rozważyć użycie BIGINT
lub DOUBLE
kolumny do przechowywania znaczników czasu JavaScript tak, jakby były liczbami. FROM_UNIXTIME(col * 0.001)
nadal będzie działać OK. Jeśli potrzebujesz aktualnego czasu do zapisania w takiej kolumnie, możesz użyć UNIX_TIMESTAMP() * 1000