Musisz być w MySQL w wersji 5.6.4 lub nowszej, aby zadeklarować kolumny z typami danych ułamkowymi sekundami. Nie jesteś pewien, czy masz odpowiednią wersję? Spróbuj SELECT NOW(3)
. Jeśli pojawi się błąd, oznacza to, że nie masz odpowiedniej wersji.
Na przykład, DATETIME(3)
da ci rozdzielczość milisekundową w twoich znacznikach czasu i TIMESTAMP(6)
da ci rozdzielczość mikrosekundową na znaczniku 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 masz pewną liczbę milisekund od epoki Uniksa , spróbuj tego, aby uzyskać wartość DATETIME (3)
FROM_UNIXTIME(ms * 0.001)
Na przykład sygnatury czasowe JavaScript są przedstawiane w milisekundach od czasu wprowadzenia epoki Uniksa .
(Zauważ, że wewnętrzna arytmetyka ułamkowa MySQL, na przykład * 0.001
, jest zawsze traktowana jako zmiennoprzecinkowa podwójnej precyzji IEEE754, więc jest mało prawdopodobne, że stracisz precyzję, zanim Słońce stanie się gwiazdą białego karła.)
Jeśli używasz starszej wersji MySQL i potrzebujesz dokładności co do sekundy, najlepszą drogą jest aktualizacja. Cokolwiek innego zmusi Cię do wykonania niechlujnych obejść.
Jeśli z jakiegoś powodu nie możesz uaktualnić, możesz rozważyć użycie kolumn BIGINT
lub DOUBLE
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 przechowywania w takiej kolumnie, możesz użyćUNIX_TIMESTAMP() * 1000