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。