DateTime或INT(Unix时间戳记)或其他用于存储时间值的最佳选择是哪一种?
我认为INT可以轻松转换为许多时区,因此在性能和通用性方面会更好。 (我来自世界各地的网络访问者可以毫无困惑地看到时间)
但是,我仍然对此表示怀疑。
有什么建议么?
DATETIME可以轻松转换为时区。 实际上比int更容易-MySQL中内置了处理功能。 dev.mysql.com/doc/refman/5.7/zh-CN/如果想要随时获取整数值,只需使用UNIX_TIMESTAMP()函数即可获取它。
糟糕,我的意思是TIMESTAMP字段。 使用那些。
我不会使用INT或TIMESTAMP保存您的日期时间值。有一个" 2038年问题"!您可以使用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。在这种情况下,您需要知道服务器的时区和客户端的时区。要获取服务器的时区,您可以在此问题上看到一些可能。
是否32位限制是TIMESTAMP优于DATETIME的唯一缺点? 我的意思是,我们永远不知道(除非我们之前进行过检查)MySQL服务器的时区。 因此,我认为DATETIME不太通用,因为它取决于MySQL Server的时区,对吗? (要转换为用户时区,首先必须知道MySQL服务器时区)
Changing the client time zone The server interprets TIMESTAMP values
in the client’s current time zone, not its own. Clients in different
time zones should set their zone so that the server can properly
interpret TIMESTAMP values for them.
而且,如果您想获得某个特定的时区,则可以执行以下操作:
CONVERT_TZ(@dt,'US/Central','Europe/Berlin') AS Berlin,
我不会将其存储在int中,您应该查看Paul DuBois撰写的《 MySQL Cookbook》,他涵盖了其中的很多内容。