究其原因,有两个:
一是,傻傻的分不清 DATE、DATETIME 和 TIMESTAMP 三种数据类型,记不住它们的格式;
二是,它们或多或少和时区相关,为了存储时区无关数据,推荐使用 int(11) 存储时间戳格式
一、 DATE、DATETIME 和 TIMESTAMP 的格式
首先要说明的是,这三种数据类型是息息相关的,它们有很多相似之处,也有各自的特征,因为这些特征,才导致了彼此的不同。
其次MySQL 可以识别多种格式的 date、datetime 和 timestamp ,具体支持的格式有
- 对于 date 类型,支持 YYYY-MM-DD 或 YY-MM-DD 以及它们各自的变形
说到变形,就是指中划线 ( - ) 可以替换为任意字符,除了数字 0-9 ,比如
格式 |
范例 |
YYYY-MM-DD |
2018-09-13 |
YY-MM-DD |
18-09-13 |
YYYY/MM/DD |
2018/09/13 |
YY/MM/DD |
18/09/13 |
YYYY^MM^DD |
2018^09^13 |
YY^MM^DD |
18^09^13 |
YYYY@MM@DD |
2018@09@13 |
YY@MM@DD |
18@09@13 |
同时还支持 YYYYMMDD 和 YYMMDD 的字符串形式,例如 '20180913' 和 '180913'。
还支持 YYYYMMMDD 和 YYMMDD 的数字格式,例如 20180913 和 180913。
2、对于 datetime 和 timestamp 类型,支持 YYYY-MM-DD HH:MM:SS 或 YY-MM-DD HH:MM:SS,一起它们的变形
这个变形其实和 DATE 一样,而且就是指中划线 ( - ) 可以替换为任意字符,除了数字 0-9 。
更进一步,这两个类型可以针对日期部分和时间部分使用不同的分隔符
格式 |
范例 |
YYYY-MM-DD HH:MM:SS |
2018-09-13 21:15:10 |
YY-MM-DD HH:MM:SS |
18-09-13 21:15:10 |
YYYYY^MM^DD HH+MM+SS |
2018^09^13 21+15+10 |
YY^MM^DD HH+MM+SS |
18^09^13 21+15+10 |
YYYY^MM^DD |
2018^09^13 |
YY^MM^DD |
18^09^13 |
YYYY@MM@DD HH^MM^SS |
2018@09@13 21^15^10 |
YY@MM@DD HH^MM^SS |
18@09@13 21^15^10 |
这种格式下也有几个点要注意
1、日期和时间部分与小数秒部分之间的唯一可用的分隔符号是小数点 ( . ) 例如 2018-09-13 21:15:10.11
2、日期与时间部分的分隔符不一定就要使用空格 ( ' ' ),还可以使用字符 T ,例如 2018-09-13 21:15:10 和 20