Трябва да сте на MySQL версия 5.6.4 или по-нова, за да декларирате колони с типове данни за част от секундата. Не сте сигурни, че имате правилната версия? Опитайте SELECT NOW(3)
. Ако получите грешка, нямате правилната версия.
Например DATETIME(3)
ще ви даде разделителна способност за милисекунди във вашите времеви марки и TIMESTAMP(6)
ще ви даде микросекундна разделителна способност на времеви печат в стил *nix.
Прочетете това:https://dev.mysql.com/ doc/refman/8.0/en/fractional-seconds.html
NOW(3)
ще ви даде текущото време от операционната система на вашия MySQL сървър с точност до милисекунди.
Ако имате няколко милисекунди от Unix епоха , опитайте това, за да получите стойност DATETIME(3)
FROM_UNIXTIME(ms * 0.001)
Отпечатъци за време на Javascript , например, са представени в милисекунди от Unix епоха .
(Забележете, че MySQL вътрешна дробна аритметика, като * 0.001
, винаги се обработва като IEEE754 с двойна прецизност с плаваща запетая, така че е малко вероятно да загубите прецизност, преди Слънцето да се превърне в звезда бяло джудже.)
Ако използвате по-стара версия на MySQL и се нуждаете от прецизност под секунда, най-добрият ви път е да надстроите. Всичко друго ще ви принуди да правите разхвърляни решения.
Ако по някаква причина не можете да надстроите, можете да обмислите използването на BIGINT
или DOUBLE
колони за съхраняване на времеви печати на Javascript, сякаш са числа. FROM_UNIXTIME(col * 0.001)
пак ще работи добре. Ако имате нужда от текущото време за съхраняване в такава колона, можете да използвате UNIX_TIMESTAMP() * 1000