-
DATE:
YYYY-MM-DD
, e.g.1999-12-31
-
DATETIME:
YYYY-MM-DD HH:MM:SS
, e.g.1999-12-31 23:59:59
-
TIMESTAMP:
YYYY-MM-DD HH:MM:SS TZ
, e.g.1970-01-01 00:00:01 UTC
注:MySQL存储TIMESTAMP
,internal cast to UTC -
TIME:
HH:MM:SS
, e.g. 范围-838:59:59
to838:59:59
更重要的: DATETIME和TIMESTAMP的区别:
DATETIME | TIMESTAMP | |
---|---|---|
来源本身 | native MySQL field | UNIX timestamp |
场景 | 如果仅保存时间(R) | 如果常改变时间(CUD) |
精确度 | 仅保存date | 精确到时间点 |
size | 8 bytes | 4 bytes |
(其实很奇怪, TIMESTAMP更精确,但是DATETIME只4 bytes而TIMESTAMP 8 bytes...)
关于上面的精确度这一点,可能很重要,因为有跨时区的问题。比如: 2020-12-08 11:28:30
是多久之前?对我来说是几秒钟之前,但是别人可能觉得是未来的时间:这就是DATETIME;但是如果我说: 从'1970-01-01 00:00:00 UTC'
开始的1607398197
秒,那么这个时间点就是确定的,不管是谁看都是2020-12-08 11:28:30
, 就是TIMESTAMP