Sha*_*deh 26 mysql sql datetime
我需要在mysql中存储时间和日期.所以我使用了NOW()功能.但我不知道我应该使用什么类型列 im phpmyadmin.应该注意的是,NOW()返回时间和日期如下:
2014-11-11 12:45:34
Run Code Online (Sandbox Code Playgroud)
这是一个解决方案,我可以使用分隔符来分隔日期和时间(2014-11-11和12:45:34),然后分别将它们存储在DATE类型和TIME类型中.或者我可以使用VARCHAR类型将它们存储在一列中.但我认为这些方式并不标准.什么是存储日期和时间的标准类型?
这是我的查询:(我也不知道为什么NOW()功能不起作用)
INSERT INTO table (timedate) VALUES (NOW())
Run Code Online (Sandbox Code Playgroud)
Sat*_*aty 63
日期:它用于具有日期部分但没有时间部分的值.MySQL以1000-01-01格式检索并显示DATE值.支持的范围是9999-12-31
DATETIME:用于包含日期和时间部分的值.MySQL以1000-01-01 00:00:00格式检索并显示DATETIME值.支持的范围是9999-12-31 23:59:59
TIMESTAMP:用于包含日期和时间部分的值.TIMESTAMP有一系列的1970-01-01 00:00:01
TIME:其值2038-01-19 03:14:07(或'HHH:MM:SS'格式表示大小时值).TIME值的范围可以从-838:59:59.小时部分可能非常大,因为TIME类型不仅可以用来表示一天中的时间(必须小于24小时),还可以用于表示两个事件之间的经过时间或时间间隔(可能远大于24小时,甚至是负面的).
对于DATETIME和TIMESTAMP之间的区别,我有一些不同的看法。甲DATETIME存储日期和时间与没有参考任何特定的时区的一个文字值。因此,我可以将DATETIME列设置为诸如'2019-01-16 12:15:00'之类的值以准确指示我的上次生日发生的时间。这是东部标准时间吗?太平洋标准时间?谁知道?将DATETIME列设置为某些值(例如NOW())时,将发生服务器的当前会话时区。存储的值将是使用当前会话时区的当前日期和时间。但是一次DATETIME 列已设置,无论当前时区是什么,它将显示相同的内容。
甲TIMESTAMP另一方面列占据您正在设置“2019年1月16日12点15分零零秒”值到它并解释它在当前会话中时区的内部表示相对于计算到1/1/1970 00:世界标准时间00:00。当该列显示时,它将根据当前时区转换回显示。将TIMESTAMP视为您所设置的值并将其从当前时区转换为UTC以进行存储,然后再将其转换回当前时区进行显示是有用的。
如果我的服务器在旧金山,但是我正在纽约运行一个事件,事件发生在9/1/1029的20:00,我将使用TIMESTAMP列来保存开始时间,请将会话时区设置为'America /纽约”,并将开始时间设置为“ 2009-09-01 20:00:00”。如果我想知道事件是否发生,无论当前时区设置如何,我都可以将开始时间与NOW()进行比较。当然,对于以有意义的方式显示给客户的角度来看,我会需要设置正确的会话时区。如果我不需要进行时间比较,那么最好只使用DATETIME 列,无论当前会话时区是什么,它将正确显示(带有隐含的EST时区)。
Saty描述了它们之间的差异。对于您的练习,您可以使用datetime为了保持NOW().
例如:
CREATE TABLE Orders
(
OrderId int NOT NULL,
ProductName varchar(50) NOT NULL,
OrderDate datetime NOT NULL DEFAULT NOW(),
PRIMARY KEY (OrderId)
)
Run Code Online (Sandbox Code Playgroud)
您可以在w3schools阅读更多内容。