我应该在MySQL中使用datetime或timestamp数据类型吗?

您是否建议使用日期 时间时间戳字段?为何(使用MySQL)? html

我正在服务器端使用PHP。 mysql


#1楼

时间戳记数据类型存储日期和时间,但以UTC格式存储,而不像datetime那样以当前时区格式存储。 当您获取数据时,时间戳再次将其转换为当前时区时间。 sql

所以,假设您在美国,而且从具备美国时区的服务器获取数据。 而后您将根据美国时区得到日期和时间。 当时间戳记数据类型列的行被更新时,它老是自动更新。 所以,跟踪上次更新特定行的时间可能颇有用。 数据库

有关更多详细信息,您能够阅读博客文章Timestamp Vs Datetime服务器


#2楼

谨防时间戳变化的,当你在表上作一个UPDATE语句。 若是您的表具备“名称”(varchar),“年龄”(int)和“ Date_Added”(时间戳)列,则运行如下DML语句 spa

UPDATE table
SET age = 30

那么“ Date_Added”列中的每一个单个值都将更改成当前时间戳。 code


#3楼

主要区别在于DATETIME是常数,而TIMESTAMP受time_zone设置影响。 htm

所以,只有在跨时区拥有或未来有同步集群时,才有意义。 索引

用简单的话来讲: 若是我在澳大利亚有一个数据库,并转储该数据库以在美国同步/填充数据库,则TIMESTAMP将更新以反映新时区的事件实时,而DATETIME会仍然反映事件在au时区的时间事件

在应该使用TIMESTAMP的地方使用DATETIME的一个很好的例子是在Facebook中,那里的服务器从不十分清楚跨时区发生了什么时间。 在一次对话中,时间说的是我在实际发送消息以前回复消息。 (固然,若是发布时间而不是同步时间,则这也多是因为消息传递软件中的时区转换错误所致。)


#4楼

  1. TIMESTAMP是四个字节,而DATETIME是八个字节。

  2. 时间戳在数据库上也更轻巧,索引速度更快。

  3. 当您须要同时包含日期和时间信息的值时,将使用DATETIME类型。 MySQL检索并以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值。 支持的范围是'1000-01-01 00:00:00'至'9999-12-31 23:59:59'。

TIMESTAMP数据类型的UTC范围为'1970-01-01 00:00:01'UTC至'2038-01-09 03:14:07'UTC。 它具备不一样的属性,具体取决于运行服务器的MySQL版本和SQL模式。

  1. DATETIME是常数,而TIMESTAMP受time_zone设置影响。

#5楼

时间戳和日期时间之间的另外一个区别是在时间戳中,您不能将默认值设置为NULL。

相关文章
相关标签/搜索