【问题标题】:How to store date in unix millisecond in Mysql?如何在 Mysql 中以 unix 毫秒为单位存储日期?
【发布时间】:2018-08-05 00:51:48
【问题描述】:

如何以 UNIX 毫秒为单位在 MYSQL 中存储当前日期,例如:1388880000000?

现在我将它存储在日期时间中。

【问题讨论】:

  • 不要。 DateTime 值应存储为 DateTime。除非您有充分的理由以其他方式存储它们(例如支持日期时间的最小值/最大值之外的日期和时间值),否则我建议将其保留在 DateTime 列中。
  • UNIX_TIMESTAMP & FROM_UNIXTIME 加上乘法/除法 */1000
  • 那么,您建议将日期存储在日期时间中吗?并使用 SELECT 格式?
  • 我已经在回答中详细说明了我的评论。希望对您有所帮助。

标签: mysql sql


【解决方案1】:

不要。 DateTime 值应存储为 DateTime,除非您有很好的理由存储它们(例如支持日期和时间值超出 DateTime 的最小值/最大值),我建议应该离开它在DateTime 列中。

您始终可以在Select 期间或在表示层中操作如何从数据库中返回它们。为了从 DateTime 返回 unix 时间,MySql 提供了一个名为 UNIX_TIMESTAMP 的内置方法。要返回毫秒数,只需乘以 1000,因为 unix 时间戳是自 1970 年 1 月 1 日以来的秒数(不包括闰秒)。如果要存储 unix 时间,则必须使用 int 数据类型。

请注意,如果您确实存储 unix 时间而不是将实际的 DateTime 值存储在 DateTime 数据类型列中,您将无法轻松使用数据库中内置的所有日期时间函数。例如,如果您想找出某个特定月份有多少行,您首先必须将数据从 int 转换为 datetime,然后才能进行计算。

您也会失去准确性(因为 unix 时间即使在 1 秒分辨率下也不准确,因为它忽略了闰秒)。

因此,总结一下 - 当数据库为您提供适合数据的数据类型时,不要使用不同的数据类型存储该数据。如果您只想存储日期,请使用Date 数据类型,如果您想存储日期时间值,请使用DateTime 数据类型,如果您想存储一天中的特定时间,请使用Time 数据类型。

附言
在处理日期时间值时,特别是如果您必须处理来自多个位置的客户,请始终在数据库中仅存储 UTC 日期时间,unless, of course, you want to go mad.

【讨论】:

  • 非常好,如果我必须使用 datetime 并使用 UNIX_TIMESTAMP 以秒为单位获取日期,或者将其乘以 1000 以以毫秒为单位。我得到了它。谢谢!
  • 你知道任何不忽略闰秒的DBMS,即'2018-07-01 00:00:01'和'2018-06-30 23:59:59'之间的区别是三秒而不是两秒?
  • 很高兴为您提供帮助 :-)。不是 DBMS 忽略闰秒,而是 unix time by definition is ignoring them.
  • 我知道,但所有 DBMS 也忽略了它。如果运气好的话,你可以加载'2016-06-30 23:59:60',但它会显示为'2016-07-01 00:00:00'(当然,我上一篇文章中的两个时间戳都应该是2016年,而不是2018年)。我所知道的任何 DBMS 都不会真正计算出正确的差异。
  • @dnoeth 我知道很多计算机系统在应用闰秒时只是重复第 59 秒,以避免处理特殊情况的时间验证。我不知道有任何计算机软件实际上将 23:59:60 视为有效时间。
猜你喜欢
  • 2021-05-25
  • 2020-06-24
  • 2021-06-30
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多