DATE,TIME,DATETIME和TIMESTAMP类型之间有什么区别

时间:2015-08-01 10:56:35

标签: mysql sql datetime

我需要在mysql中存储时间日期。所以我使用了NOW()函数。但我不知道我应该为 type column im phpmyadmin使用什么。应该注意NOW()返回时间和日期,如下所示:

2014-11-11 12:45:34

这是一个解决方案,我可以使用分隔符来分隔日期和时间(2014-11-1112:45:34),然后将它们分别存储在DATE类型和TIME类型中。或者我可以使用VARCHAR类型将它们存储在一列中。但我认为这些方式并不标准。什么是存储日期和时间的标准类型?

这是我的查询:(我也不知道为什么NOW()函数不起作用)

INSERT INTO table (timedate) VALUES (NOW())

3 个答案:

答案 0 :(得分:50)

日期:它用于带有日期部分但没有时间部分的值。 MySQL以 YYYY-MM-DD 格式检索并显示DATE值。支持的范围是1000-01-019999-12-31

DATETIME:它用于包含日期和时间部分的值。 MySQL以 YYYY-MM-DD HH:MM:SS 格式检索并显示DATETIME值。支持的范围是1000-01-01 00:00:009999-12-31 23:59:59

TIMESTAMP:它用于包含日期和时间部分的值。 TIMESTAMP的范围为1970-01-01 00:00:01 UTC到2038-01-19 03:14:07 UTC。

TIME:其值为 HH:MM:SS 格式(或 HHH:MM:SS < / em> 格式的大小时值)。 TIME值的范围可以从-838:59:59838:59:59。小时部分可能太大,因为TIME类型不仅可以用来表示一天中的时间(必须小于24小时),还可以用于表示两个事件之间的经过时间或时间间隔(可能远大于24小时,甚至是负面的。)

答案 1 :(得分:3)

Saty描述了它们之间的差异。对于您的练习,您可以使用datetime来保持NOW()的输出。

例如:

CREATE TABLE Orders
(
  OrderId int NOT NULL,
  ProductName varchar(50) NOT NULL,
  OrderDate datetime NOT NULL DEFAULT NOW(),
  PRIMARY KEY (OrderId)
)

您可以在w3schools了解更多信息。

答案 2 :(得分:1)

对于 DATETIME TIMESTAMP 之间的区别,我的看法略有不同。 DATETIME (日期时间)存储日期和时间的文字值,而不引用任何特定的时区。因此,我可以将 DATETIME 列设置为诸如“ 2019-01-16 12:15:00”之类的值,以准确指示上次生日发生的时间。这是东部标准时间吗?太平洋标准时间?谁知道?将 DATETIME 列设置为某些值(例如 NOW())时,将发生服务器当前时区的作用。存储的值将是使用当前有效时区的当前日期和时间。但是一旦设置了 DATETIME 列,无论当前时区是什么,它将显示相同的内容。

另一方面,

TIMESTAMP 列采用您设置的“ 2019-01-16 12:15:00”值,并在当前时区对其进行解释以计算内部表示形式相对于1/1/1970 00:00:00 UTC。当该列显示时,它将根据当前时区转换回显示。将 TIMESTAMP 视为您所设置的值并将其从当前时区转换为UTC以进行存储,然后再将其转换回当前时区进行显示,这是有用的。 >

如果我的服务器位于旧金山,但我正在纽约举办一个活动,活动于29年9月10日20:00开始,则我将使用 TIMESTAMP 列来保存开始时间,将时区设置为“美国/纽约”,并将开始时间设置为“ 2009-09-01 20:00:00”。如果我想知道事件是否发生,无论当前时区设置如何,我都可以将开始时间与 NOW()进行比较。当然,为了以有意义的方式向有远见的客户进行展示,我需要设置正确的时区。如果不需要进行时间比较,那么最好使用 DATETIME 列,无论服务器当前时区如何,该列都将正确显示(带有隐含的EST时区)。是。