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



我需要在mysql中存储时间日期。我用的是NOW()函数。但我不知道我应该使用类型列在phpmyadmin。应该注意的是,NOW()返回时间和日期如下:

2014-11-11 12:45:34

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

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

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

DATE:用于有日期部分但没有时间部分的值。MySQL以YYYY-MM-DD格式检索和显示DATE值。取值范围为1000-01-01 ~ 9999-12-31

DATETIME:用于同时包含日期和时间部分的值。MySQL以YYYY-MM-DD HH:MM:SS格式检索和显示DATETIME值。取值范围:1000-01-01 00:00:00 ~ 9999-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格式)。取值范围为-838:59:59 ~ 838:59:59。小时部分可能如此之大,因为TIME类型不仅可以用来表示一天中的时间(必须小于24小时),还可以用来表示经过的时间或两个事件之间的时间间隔(可能比24小时大得多,甚至是负数)。

我对DATETIMETIMESTAMP之间的差异有稍微不同的看法。A 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以进行存储,然后将其转换回当前会话时区以进行显示,这是一个有用的虚构。

如果我的服务器在旧金山,但是我正在纽约运行一个从9/1/1029 20:00开始的事件,我将使用TIMESTAMP列来保存开始时间,将会话时区设置为'America/New York',并将开始时间设置为'2009-09-01 20:00:00'。如果我想知道事件是否发生,无论当前会话时区设置如何,我都可以将开始时间与NOW()进行比较。当然,为了以有意义的方式显示给透视图客户,I 需要设置正确的会话时区。如果我不需要进行时间比较,那么我最好使用DATETIME列,无论当前会话时区是什么,它都将正确显示(带有隐含的EST时区)。

<<p> 时间戳限制/strong>

TIMESTAMP类型的范围为'1970-01-01 00:00:01' UTC' 20388-01-19 03:14:07' UTC,因此它可能不适用于您的特定应用程序。在这种情况下,您将不得不使用DATETIME类型。当然,当您将此类型与日期函数(如NOW())一起使用时,您必须始终关注当前会话时区是否正确设置。

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阅读更多内容

简短说明

  • DATE: DATE YYYY-MM-DD(年-月-日)的形式存储日期值不存储时间

  • TIME: TIME HH:MM:SS (hours-minutes-seconds)的形式存储时间值。它不存储日期。

  • DATETIME: DATETIMEYYYY-MM-DD HH:MM:SS的形式存储日期和时间值。它同时存储日期和时间。

  • TIMESTAMP: TIMESTAMP类似于DATETIME 但包含一个时区。(取值示例:YYYY-MM-DD HH:MM:SS +HH:MM, YYYY-MM-DD HH:MM:SS -HH:MM+HH:MM-HH:MM表示UTC (Coordinated Universal time,协调世界时)的时区。

最新更新