我需要在mysql中存储时间和日期。所以我使用了NOW()
函数。但我不知道我应该为 type column im phpmyadmin使用什么。应该注意NOW()
返回时间和日期,如下所示:
2014-11-11 12:45:34
这是一个解决方案,我可以使用分隔符来分隔日期和时间(2014-11-11
和12:45:34
),然后将它们分别存储在DATE类型和TIME类型中。或者我可以使用VARCHAR类型将它们存储在一列中。但我认为这些方式并不标准。什么是存储日期和时间的标准类型?
这是我的查询:(我也不知道为什么NOW()
函数不起作用)
INSERT INTO table (timedate) VALUES (NOW())
答案 0 :(得分:50)
日期:它用于带有日期部分但没有时间部分的值。 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 < / em> 格式的大小时值)。 TIME值的范围可以从-838:59:59
到838: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时区)。是。