MySQL
Czas z drugą dokładnością
Szukaj…
Uwagi
Musisz być w MySQL w wersji 5.6.4 lub nowszej, aby zadeklarować kolumny z typami danych ułamkowych sekund.
Na przykład DATETIME(3)
da ci milisekundową rozdzielczość w twoich znacznikach czasu, a TIMESTAMP(6)
da ci mikrosekundową rozdzielczość na * znaczniku czasu w stylu nix.
Przeczytaj to: http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html
NOW(3)
da ci bieżący czas z systemu operacyjnego twojego serwera MySQL z milisekundową precyzją.
(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 stracisz precyzję, zanim Słońce stanie się białą karłem.)
Uzyskaj aktualny czas z milisekundową precyzją
SELECT NOW(3)
Zrób sztuczkę.
Uzyskaj aktualny czas w formie przypominającej znacznik czasu Javascript.
Znaczniki czasu JavaScript są oparte na czcigodnym typie danych time_t
i pokazują liczbę milisekund od 1970-01-01 00:00:00
UTC.
To wyrażenie pobiera bieżącą godzinę jako liczbę całkowitą znacznika czasu Javascript. (Robi to poprawnie bez względu na bieżące ustawienie strefy czasowej.)
ROUND(UNIX_TIMESTAMP(NOW(3)) * 1000.0, 0)
Jeśli masz wartości TIMESTAMP
przechowywane w kolumnie, możesz je odzyskać jako całkowite znaczniki czasu Javascript za pomocą funkcji UNIX_TIMESTAMP ().
SELECT ROUND(UNIX_TIMESTAMP(column) * 1000.0, 0)
Jeśli kolumna zawiera kolumny DATETIME
i pobierzesz je jako znaczniki czasu Javascript, te znaczniki czasu zostaną przesunięte o przesunięcie strefy czasowej strefy czasowej, w której są przechowywane.
Utwórz tabelę z kolumnami do przechowywania w sekundach.
CREATE TABLE times (
dt DATETIME(3),
ts TIMESTAMP(3)
);
tworzy tabelę z polami daty / godziny z dokładnością do milisekund.
INSERT INTO times VALUES (NOW(3), NOW(3));
wstawia do tabeli wiersz zawierający wartości NOW()
z dokładnością do milisekund.
INSERT INTO times VALUES ('2015-01-01 16:34:00.123','2015-01-01 16:34:00.128');
wstawia określone wartości precyzji milisekundowej.
Zauważ , że musisz użyć NOW(3)
zamiast NOW()
jeśli używasz tej funkcji do wstawiania precyzyjnych wartości czasu.
Konwertuj wartość daty / godziny z dokładnością do milisekundy na tekst.
%f
jest specyfikatorem formatu ułamkowej precyzji dla funkcji DATE_FORMAT () .
SELECT DATE_FORMAT(NOW(3), '%Y-%m-%d %H:%i:%s.%f')
wyświetla wartość jak 2016-11-19 09:52:53.248000
z ułamkowymi mikrosekundami. Ponieważ użyliśmy NOW(3)
, ostatnie trzy cyfry ułamka to 0.
Przechowuj znacznik czasu Javascript w kolumnie TIMESTAMP
Jeśli masz wartość znacznika czasu JavaScript, na przykład 1478960868932
, możesz przekonwertować ją na wartość ułamkową czasu MySQL, jak poniżej:
FROM_UNIXTIME(1478960868932 * 0.001)
Użycie tego rodzaju wyrażenia jest proste do przechowywania znacznika czasowego Javascript w tabeli MySQL. Zrób to:
INSERT INTO table (col) VALUES (FROM_UNIXTIME(1478960868932 * 0.001))
(Oczywiście, będziesz chciał wstawić inne kolumny).