MySQL 中常用的两种时间储存类型分别是 datetime
和 timestamp
,建表时该如何选择呢?
占用空间
类型 | 占据字节 | 表示形式 |
---|---|---|
datetime | 8 字节 | yyyy-mm-dd hh:mm:ss |
timestamp | 4 字节 | yyyy-mm-dd hh:mm:ss |
表示范围
类型 | 表示范围 |
---|---|
datetime | ‘1000-01-01 00:00:00.000000’ to ‘9999-12-31 23:59:59.999999’ |
timestamp | ‘1970-01-01 00:00:01.000000’ to ‘2038-01-19 03:14:07.999999’ |
时区
timestamp
占 4 个字节,而且是以utc
格式储存,它会自动检索当前时区并进行转换,存和取可能不一样。datetime
占 8 个字节储存,不会进行时区的检索,存和取一样。区别:如果存进去的是
NULL
,timestamp
会自动储存当前时间,而datetime
会储存NULL
。
测试
1 | # 创建测试表 |
选择
- 如果在时间上要超过
Linux
时间的,或者服务器时区不一样的就建议选择datetime
。 - 如果是想要使用自动插入时间或者自动更新时间功能,可以使用
timestamp
。 - 存储年使用
year
,存储日期使用date
。