您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?
我在服务器端使用PHP。
您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?
我在服务器端使用PHP。
当前回答
这里的许多答案都建议将时间戳存储为时间戳,以防必须表示定义良好的时间点。但是,如果您按照惯例将所有时间点都存储在UTC中,那么您也可以使用datetime获取时间点。
其他回答
根据我的经验,如果您想要一个插入仅发生一次的日期字段,并且不想对该特定字段进行任何更新或任何其他操作,请使用日期时间。
例如,考虑具有REGISTRATION DATE字段的用户表。在该用户表中,如果您想知道特定用户的上次登录时间,请使用时间戳类型的字段,以便更新该字段。
如果您是从phpMyAdmin创建表,则默认设置将在行更新发生时更新时间戳字段。如果时间戳字段未随行更新而更新,则可以使用以下查询使时间戳字段自动更新。
ALTER TABLE your_table
MODIFY COLUMN ts_activity TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
在我的例子中,我将UTC设置为所有事物的时区:系统、数据库服务器等,只要我能做到这一点。如果我的客户需要另一个时区,那么我会在应用程序上配置它。
我几乎总是喜欢时间戳而不是日期时间字段,因为时间戳隐含地包含时区。因此,由于从不同时区的用户访问应用程序的那一刻起,您希望他们在本地时区中查看日期和时间,因此与数据保存在datetime字段中相比,此字段类型更容易实现。
另外,在将数据库迁移到另一个时区的系统的情况下,我会更加自信地使用时间戳。更不用说在计算两个时刻之间的差异时可能出现的问题,这两个时刻间的总时间变化较大,并且需要1小时或更短的精度。
总之,我看重时间戳的优点:
可在国际(多时区)应用程序上使用在时区之间轻松迁移很容易计算差异(只需减去两个时间戳)不用担心夏天的约会
出于所有这些原因,我选择了UTC和时间戳字段。我避免头痛;)
在使用MySQL和PHP时,我总是使用Unix时间戳。这主要是因为PHP中的默认日期方法使用时间戳作为参数,因此不需要解析。
要获取PHP中当前的Unix时间戳,只需执行time();在MySQL中执行SELECT UNIX_TIMESTAMP();。
TIMESTAMP为4字节,DATETIME为8字节。
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
但正如斯克罗尼德所说,它的下限是1970年。不过,这对未来可能发生的任何事情都很好;)
我是基于语义做出这个决定的。
当我需要记录(或多或少)固定时间点时,我使用时间戳。例如,当记录被插入到数据库中时,或者当发生某些用户操作时。
当可以任意设置和更改日期/时间时,我使用datetime字段。例如,当用户可以保存以后的更改约会时。