哪一个最好用,DateTime或INT(Unix时间戳)或其他任何东西来存储时间值?
我认为INT在性能方面会更好,也更普遍,因为它可以很容易地转换为很多时区。 (我来自世界各地的网络访问者可以毫不费力地看到时间)
但是,我仍然对此表示怀疑。 有什么建议吗?
答案 0 :(得分:8)
我不会使用INT
或TIMESTAMP
来保存您的日期时间值。有"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,他涵盖了很多东西。还有很大一部分关于你的排名。