如何在Mysql中以unix毫秒存储日期?
如何在MYSQL中以UNIX毫秒为单位存储当前日期,例如:138888000000如何在Mysql中以unix毫秒存储日期?,mysql,sql,Mysql,Sql,如何在MYSQL中以UNIX毫秒为单位存储当前日期,例如:138888000000 现在我将其存储在datetime中。不要DateTime值应存储为DateTime,除非您有很好的理由存储它们(比如支持日期和时间值超出DateTime的最小/最大值),否则我建议将其保留在DateTime列中 在Select期间或在表示层中,您始终可以操纵如何从数据库返回它们。为了从DateTime返回unix时间,MySql提供了一个名为的内置方法。要返回毫秒数,只需乘以1000,因为unix时间戳是自197
现在我将其存储在datetime中。不要
DateTime
值应存储为DateTime
,除非您有很好的理由存储它们(比如支持日期和时间值超出DateTime
的最小/最大值),否则我建议将其保留在DateTime
列中
在Select
期间或在表示层中,您始终可以操纵如何从数据库返回它们。为了从DateTime
返回unix时间,MySql提供了一个名为的内置方法。要返回毫秒数,只需乘以1000,因为unix时间戳是自1970年1月1日以来的秒数(不包括闰秒)。如果要存储unix时间,则必须使用int数据类型
请注意,如果您确实存储unix时间,而不是将实际的DateTime
值存储在DateTime
数据类型列中,您将失去轻松使用所有内置数据库函数的能力。例如,如果您想知道有多少行属于一个特定的月份,首先必须将数据从int转换为datetime,然后才能计算出来
您还将失去准确性(因为unix时间即使在1秒分辨率上也是不准确的,因为它忽略了闰秒)
因此,总结一下——当数据库提供适合数据的数据类型时,不要使用其他数据类型存储该数据。如果只想存储日期,请使用数据类型;如果要存储日期时间值,请使用数据类型;如果要存储一天中的特定时间,请使用数据类型
附加说明在处理日期时间值时,尤其是当您必须处理来自多个位置的客户端时,请始终仅在数据库中存储UTC日期时间,而不要存储
DateTime
值应存储为DateTime
,除非您有很好的理由存储它们(比如支持日期和时间值超出DateTime
的最小/最大值),否则我建议将其保留在DateTime
列中
在Select
期间或在表示层中,您始终可以操纵如何从数据库返回它们。为了从DateTime
返回unix时间,MySql提供了一个名为的内置方法。要返回毫秒数,只需乘以1000,因为unix时间戳是自1970年1月1日以来的秒数(不包括闰秒)。如果要存储unix时间,则必须使用int数据类型
请注意,如果您确实存储unix时间,而不是将实际的DateTime
值存储在DateTime
数据类型列中,您将失去轻松使用所有内置数据库函数的能力。例如,如果您想知道有多少行属于一个特定的月份,首先必须将数据从int转换为datetime,然后才能计算出来
您还将失去准确性(因为unix时间即使在1秒分辨率上也是不准确的,因为它忽略了闰秒)
因此,总结一下——当数据库提供适合数据的数据类型时,不要使用其他数据类型存储该数据。如果只想存储日期,请使用数据类型;如果要存储日期时间值,请使用数据类型;如果要存储一天中的特定时间,请使用数据类型
附加说明在处理日期时间值时,尤其是当您必须处理来自多个位置的客户端时,请始终仅在数据库中存储UTC日期时间,不要。DateTime值应存储为DateTime。除非您有很好的理由以其他方式存储它们(比如支持datetime的最小/最大值之外的日期和时间值),否则我建议将其保留在datetime列中。
UNIX\u TIMESTAMP
&FROM\u UNIXTIME
加上乘除*/1000使用时间戳。看到了,你建议用datetime存储日期吗?并使用SELECT格式?我在回答中详细阐述了我的评论。希望有帮助,不要。DateTime值应存储为DateTime。除非您有很好的理由以其他方式存储它们(比如支持datetime的最小/最大值之外的日期和时间值),否则我建议将其保留在datetime列中。UNIX\u TIMESTAMP
&FROM\u UNIXTIME
加上乘除*/1000使用时间戳。看到了,你建议用datetime存储日期吗?并使用SELECT格式?我在回答中详细阐述了我的评论。希望有帮助。很好,如果我的情况是,我必须使用datetime
并使用UNIX\u TIMESTAMP
以秒为单位获取日期,或者将其乘以1000以毫秒为单位。我得到了它。非常感谢。您知道有哪个数据库管理系统不忽略闰秒,即“2018-07-01 00:00:01”和“2018-06-30 23:59:59”之间的差异是3秒而不是2秒吗?很高兴提供帮助:-)。我知道,不是DBMS忽略了闰秒,而是所有DBMS也忽略了闰秒。如果你运气好的话,你可以加载'2016-06-30 23:59:60'
,但随后它会显示为'2016-07-01 00:00:00'
(当然,我上一篇文章中的两个时间戳都应该是2016年,而不是2018年)。我所知道的任何数据库管理系统都不会实际计算出正确的差值。@d但我知道很多计算机系统在应用闰秒时只是重复59秒,以避免处理特殊情况下的时间验证。我不知道有哪种计算机软件真正将23:59:60视为有效时间。很好,如果我的情况是,我必须使用datetime
并使用UNIX\u TIMESTAMP
以秒为单位获取日期,或者将其乘以1000以毫秒为单位。我得到了它。非常感谢。