您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?
我在服务器端使用PHP。
您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?
我在服务器端使用PHP。
当前回答
在表上执行UPDATE语句时,请注意时间戳的更改。如果您有一个列为“Name”(varchar)、“Age”(int)和“Date_Add”(timestamp)的表,则运行以下DML语句
UPDATE table
SET age = 30
则“Date_Add”列中的每个值都将更改为当前时间戳。
其他回答
在表上执行UPDATE语句时,请注意时间戳的更改。如果您有一个列为“Name”(varchar)、“Age”(int)和“Date_Add”(timestamp)的表,则运行以下DML语句
UPDATE table
SET age = 30
则“Date_Add”列中的每个值都将更改为当前时间戳。
时间戳和日期时间之间的另一个区别是时间戳,不能将默认值设置为NULL。
在MySQL 5及以上版本中,TIMESTAMP值从当前时区转换为UTC进行存储,并从UTC转换回当前时区进行检索。(这仅适用于TIMESTAMP数据类型,而不适用于DATETIME等其他类型。)
默认情况下,每个连接的当前时区是服务器的时间。可以根据每个连接设置时区,如MySQL Server时区支持中所述。
TIMESTAMP为4字节,DATETIME为8字节。
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
但正如斯克罗尼德所说,它的下限是1970年。不过,这对未来可能发生的任何事情都很好;)
在遇到许多与时区相关的问题和错误后,我停止在应用程序中使用datetime。在大多数情况下,IMHO使用时间戳优于datetime。
当你问什么时候?答案类似于“2019-02-05 21:18:30”,这不是完整的,也不是定义的答案,因为它缺少另一部分,在哪个时区?华盛顿?莫斯科北京?
使用不带时区的日期时间意味着您的应用程序只处理一个时区,但时间戳为您提供了日期时间的好处,以及在不同时区显示相同精确时间点的灵活性。
以下是一些会让您后悔使用datetime并希望将数据存储在时间戳中的情况。
为了客户的舒适,您希望根据他们首选的时区向他们显示时间,而不让他们做数学运算,并将时间转换为有意义的时区。您只需更改时区,所有应用程序代码都将相同。(实际上,您应该始终在应用程序开始时定义时区,或者在PHP应用程序中定义请求处理)SET time_zone=“+2:00”;您改变了所居住的国家,并继续维护数据,同时在不同的时区查看数据(而不更改实际数据)。您接受来自世界各地不同客户的数据,每个客户都会在自己的时区中插入时间。
简言之
datetime=应用程序支持1个时区(用于插入和选择)
timestamp=应用程序支持任何时区(用于插入和选择)
这个答案只是为了强调时区的灵活性和易用性,它没有涵盖任何其他差异,如列大小、范围或分数。