Mysql设置time时,会提示多种time格式。使用go语言的time.Time类型,又更容易混肴,因此做一下区分。
time类型保存的是一个时分秒,比如10:00:00
这样的内容。和go语言中的time.Time格式完全不是一回事。
同样的,还有YEAR类型,则是只保存一个年份。
DATE类型则是只保存年月日。
这两个比较容易混肴还是,之前一直也没搞懂。顺带吐槽一下Google这个智能推荐的答案,这说了个啥呢…
二者存储的内容相同,均为 YYYY-MM-DD HH:MM:SS
1、占用大小不同:
DATETIME 8字节
TIMESTAMP 4字节。
2、取值范围不同:
DATETIME类型范围: '1000-01-01 00:00:00'~'9999-12-3 23:59:59'
TIMESTAMP类型范围: '1970-01-01 00:00:01'UTC~'2038-01-19 03:14:07'UTC
3、存储时区不同:
DATETIME 在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;
TIMESTAMP 值的存储是以 UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的。
1 在满足使用条件的情况下,占据存储空间越少越好,此时选择timestamp比datetime更好.
2 timestamp类型的存储,是以UTC时区来保存的,在显示时会自动将日期数据转换,如果时间的场景对应多个时区,此时选择timestamp比datetime更好.
3 关于日期的使用范围, timestamp类型最大只支持到2038-01-19年,所以如果使用的日期时间较大, 则选择datetime比timestamp更好.
贴一个另一个博文的总结
但对我而言,我觉得在数据量不大、不存在跨国业务的数据库时候,用DATETIME会方便一些。因为这样可以避免因时区问题导致的错误。
直接引用一张图来对比方便。图源