DATETIME VS INT用于存储时间?

时间:2017-04-30 11:36:23

标签: mysql datetime time unix-timestamp

哪一个最好用,DateTime或INT(Unix时间戳)或其他任何东西来存储时间值?

我认为INT在性能方面会更好,也更普遍,因为它可以很容易地转换为很多时区。 (我来自世界各地的网络访问者可以毫不费力地看到时间)

但是,我仍然对此表示怀疑。 有什么建议吗?

2 个答案:

答案 0 :(得分:8)

我不会使用INTTIMESTAMP来保存您的日期时间值。有"Year-2038-Problem"!您可以使用DATETIME并长时间保存日期时间。

使用TIMESTAMP或数字列类型,您只能存储从1970年到2038年的年份范围。使用DATETIME类型,您可以保存年份从1000到9999的日期。

建议使用数字列类型(INT)来存储日期时间信息。 MySQL(以及其他系统)提供了许多处理日期时间信息的函数。与自定义函数或计算相比,这些函数更快,更优化:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html

要将存储值的时区转换为客户端时区,您可以使用CONVERT_TZ。在这种情况下,您需要知道服务器的时区和客户端的时区。要获取服务器的时区,您可以在this question上看到一些可能性。

答案 1 :(得分:3)

  

更改客户端时区服务器解释TIMESTAMP值   在客户端的当前时区,而不是它自己的时区。客户不同   时区应设置其区域,以便服务器可以正常使用   解释它们的TIMESTAMP值。

如果您想获得某个时区,您可以这样做:

CONVERT_TZ(@dt,'US/Central','Europe/Berlin') AS Berlin,

我不会将它存储在int中,你应该查看Paul DuBois的MySQL Cookbook,他涵盖了很多东西。还有很大一部分关于你的排名。