您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?
我在服务器端使用PHP。
您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?
我在服务器端使用PHP。
当前回答
TIMESTAMP是四个字节,而DATETIME是八个字节。时间戳在数据库上也更轻,索引速度更快。DATETIME类型在您需要同时包含日期和时间信息的值时使用。MySQL以YYYY-MM-DD HH:MM:SS格式检索并显示DATETIME值。支持的范围为1000-01-01 00:00:00至9999-12-31 23:59:59。TIMESTAMP数据类型的范围为1970-01-01 00:00:01 UTC到2038-01-09 03:14:07 UTC。它具有不同的财产,具体取决于MySQL版本和服务器运行的SQL模式。DATETIME是常量,而TIMESTAMP受时区设置的影响。
其他回答
值得注意的是,在MySQL中,您可以在创建表列时使用以下内容:
on update CURRENT_TIMESTAMP
这将更新每次修改行时的时间,有时对存储的上次编辑信息非常有用。这只适用于时间戳,但不适用于日期时间。
在我的例子中,我将UTC设置为所有事物的时区:系统、数据库服务器等,只要我能做到这一点。如果我的客户需要另一个时区,那么我会在应用程序上配置它。
我几乎总是喜欢时间戳而不是日期时间字段,因为时间戳隐含地包含时区。因此,由于从不同时区的用户访问应用程序的那一刻起,您希望他们在本地时区中查看日期和时间,因此与数据保存在datetime字段中相比,此字段类型更容易实现。
另外,在将数据库迁移到另一个时区的系统的情况下,我会更加自信地使用时间戳。更不用说在计算两个时刻之间的差异时可能出现的问题,这两个时刻间的总时间变化较大,并且需要1小时或更短的精度。
总之,我看重时间戳的优点:
可在国际(多时区)应用程序上使用在时区之间轻松迁移很容易计算差异(只需减去两个时间戳)不用担心夏天的约会
出于所有这些原因,我选择了UTC和时间戳字段。我避免头痛;)
TIMESTAMP为4字节,DATETIME为8字节。
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
但正如斯克罗尼德所说,它的下限是1970年。不过,这对未来可能发生的任何事情都很好;)
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
| TIMESTAMP | DATETIME |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
| TIMESTAMP requires 4 bytes. | DATETIME requires 8 bytes. |
| Timestamp is the number of seconds that have elapsed since January 1, 1970 00:00 UTC. | DATETIME is a text displays 'YYYY-MM-DD HH:MM:SS' format. |
| TIMESTAMP supported range: ‘1970-01-01 00:00:01′ UTC to ‘2038-01-19 03:14:07′ UTC. | DATETIME supported range: ‘1000-01-01 00:00:00′ to ‘9999-12-31 23:59:59′ |
| TIMESTAMP during retrieval converted back to the current time zone. | DATETIME can not do this. |
| TIMESTAMP is used mostly for metadata i.e. row created/modified and audit purpose. | DATETIME is used mostly for user-data. |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
TIMESTAMP是四个字节,而DATETIME是八个字节。时间戳在数据库上也更轻,索引速度更快。DATETIME类型在您需要同时包含日期和时间信息的值时使用。MySQL以YYYY-MM-DD HH:MM:SS格式检索并显示DATETIME值。支持的范围为1000-01-01 00:00:00至9999-12-31 23:59:59。TIMESTAMP数据类型的范围为1970-01-01 00:00:01 UTC到2038-01-09 03:14:07 UTC。它具有不同的财产,具体取决于MySQL版本和服务器运行的SQL模式。DATETIME是常量,而TIMESTAMP受时区设置的影响。