在数据库中存储时间(以毫秒为单位)


10

关于在数据库中存储“时间”的一个简单问题。我正在记录用户运行时间,其格式为00:00:00:00(小时,分钟,秒,毫秒)。

我本来打算将其存储为,TIME但是后来我意识到MySQL不支持这种类型的毫秒。

我将存储从用户秒表获取的实际时间,而不是他们运行并完成的时间(这将在插入之前进行计算)。

最好使用哪种字段类型?我在想double或者float,但是我不确定是否行得通?

Answers:


6

就个人而言,我会在持续时间内使用整数类型

示例:无符号int列中的340,000毫秒是340000。

对我来说,日期时间,时间,日期等是明确的时间点。在这种情况下,340秒是没有意义的。具有起始date/time允许的持续时间将被添加,当然


3
interval为此,有一个标准的SQL 数据类型。但是并非所有的DBMS(当然也不是MySQL)都支持此功能。
a_horse_with_no_name 2012年

感谢您的回答,我是否需要将其转换为当前格式为00:00:00:00的标准格式?我可以将列设置为允许该类型的格式吗?
Elliott 2012年

@Elliott:可以展示。否则就是一个数字
gbn 2012年

1
请注意,您的格式可能是(或出于可读性考虑)00:00:00.000(请注意以点代替冒号和3位数字表示毫秒。)
Jannes 2012年

2

这取决于您要测量多长时间。如果您录制的时间不会比常规的无符号int长2 ^ 32或4294967296 ms,那很好。大约相当于50天的时钟时间,顺便说一句。

如果您存储的是Unix时间戳或更长的间隔,请考虑使用bigint。这将为您提供8个字节的空间,或者能够记录长达1.84467440737096e + 19 ms(大约5亿年)的时间


1

如果你使用MySQL 5.6.4或更高版本,可以使用TIME(3)DATETIME(3)并且TIMESTAMP(3)列类型存储多达6位小数(替换3用的小数位数你需要)。小数部分添加到时间串中点后;例如:2018-09-08 17:51:04.781

官方参考

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.