我需要在mysql中存储时间和日期。我用的是NOW()
函数。但我不知道我应该使用类型列在phpmyadmin。应该注意的是,NOW()
返回时间和日期如下:
2014-11-11 12:45:34
这是一个解决方案,我可以使用分隔符来分离日期和时间(2014-11-11
和12: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小时大得多,甚至是负数)。
我对DATETIME和TIMESTAMP之间的差异有稍微不同的看法。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:
DATETIME
以YYYY-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,协调世界时)的时区。