sql >> Databáze >  >> RDS >> Mysql

Časové razítko s přesností na milisekundy:Jak je uložit v MySQL

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



  1. Proč může být v klauzuli DEFAULT pouze jeden sloupec TIMESTAMP s CURRENT_TIMESTAMP?

  2. Oracle SQL escape znak (pro '&')

  3. Jak mohu optimalizovat funkci ORDER BY RAND() MySQL?

  4. Nalezení výkonnostních výhod s dělením