gpt4 book ai didi

mysql - 毫秒精度的时间戳 : How to save them in MySQL

转载 作者:IT老高 更新时间:2023-10-28 12:53:47 25 4
gpt4 key购买 nike

我必须使用 MySQL 开发应用程序,并且必须保存诸如“1412792828893”之类的值,这些值表示时间戳,但精度为毫秒。也就是说,自 1.1.1970 以来的毫秒数。我将该行声明为 timestamp 但不幸的是这不起作用。所有值都设置为 0000-00-00 00:00:00

CREATE TABLE IF NOT EXISTS `probability` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`segment_id` int(11) NOT NULL,
`probability` float NOT NULL,
`measured_at` timestamp NOT NULL,
`provider_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ;

应该如何声明才能以这种精度保存时间戳值?

最佳答案

您需要使用 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 epoch 的毫秒数, 试试这个以获得 DATETIME(3) 值

FROM_UNIXTIME(ms * 0.001)

Javascript timestamps ,例如,从 Unix epoch 开始以毫秒为单位表示。 .

(请注意,MySQL 内部小数运算,如 * 0.001,始终作为 IEEE754 double float 处理,因此在太阳变成白矮星之前您不太可能失去精度。)

如果您使用的是旧版本的 MySQL,并且需要亚秒级时间精度,那么最好的方法是升级。其他任何事情都会迫使您做出困惑的解决方法。

如果由于某种原因无法升级,您可以考虑使用 BIGINTDOUBLE 列来存储 Javascript 时间戳,就好像它们是数字一样。 FROM_UNIXTIME(col * 0.001) 仍然可以正常工作。如果您需要将当前时间存储在这样的列中,您可以使用 UNIX_TIMESTAMP() * 1000

关于mysql - 毫秒精度的时间戳 : How to save them in MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26299149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com