当写入时间时, mysql会判断当前mysql时区,并对写入时间进行转换, 然后写入datetime或timestamp. 读取datatime和timestamp的时候, mysql会判断当前mysq时区,并对读取时间进行转换.
datetime中不存储时区,所以datetime的时区就是mysql时区. timesteamp中储存时区, 所以timestamp的时区不会随着mysql时区的调整和变化. 所以,当mysql时区调整后, 从数据库中读出的时间,datetime会与之前不一致,timestamp与之前一直.
当一套系统要为多个时区提供服务时,有两种处理方式
时间全部使用timestamp存储.
所有系统内部的时区都设置为UTC时区, 即+00:00.
序列化工具. 如jackson等
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss Z
spring.jackson.time-zone=GMT+0
所有的后端系统统一使用UTC时间, 与外部系统进行数据交互时,时间需携带时区.例如向前端返回时间数据, 应该携带时区.