Abyste mohli deklarovat sloupce s datovými typy zlomkových sekund, musíte být na MySQL verze 5.6.4 nebo novější. Nejste si jisti, zda máte správnou verzi? Zkuste SELECT NOW(3)
. Pokud se zobrazí chyba, nemáte správnou verzi.
Například DATETIME(3)
vám poskytne milisekundové rozlišení ve vašich časových razítkách a TIMESTAMP(6)
vám poskytne mikrosekundové rozlišení na časovém razítku ve stylu *nix.
Přečtěte si toto:https://dev.mysql.com/ doc/refman/8.0/en/fractional-seconds.html
NOW(3)
vám poskytne aktuální čas z operačního systému vašeho serveru MySQL s přesností na milisekundy.
Pokud máte několik milisekund od epochy Unix , zkuste toto, abyste získali hodnotu DATETIME(3)
FROM_UNIXTIME(ms * 0.001)
Časová razítka JavaScript , jsou například uvedeny v milisekundách od epochy Unix .
(Všimněte si, že interní zlomková aritmetika MySQL, jako * 0.001
, je vždy zpracováno jako IEEE754 s dvojitou přesností s plovoucí desetinnou čárkou, takže je nepravděpodobné, že ztratíte přesnost dříve, než se Slunce stane bílým trpaslíkem.)
Pokud používáte starší verzi MySQL a potřebujete subsekundovou přesnost času, nejlepší cestou je upgradovat. Cokoli jiného vás donutí dělat chaotická řešení.
Pokud z nějakého důvodu nemůžete upgradovat, můžete zvážit použití BIGINT
nebo DOUBLE
sloupce pro ukládání časových razítek Javascriptu, jako by to byla čísla. FROM_UNIXTIME(col * 0.001)
bude stále fungovat OK. Pokud potřebujete aktuální čas k uložení do takového sloupce, můžete použít UNIX_TIMESTAMP() * 1000