背景
本地的 sql 语句检索出来的 timestamp 的 date 对象与线上 sql 语句返回的结果不同,差8个时区。即 sql 一致,结果不一致。
- 本地环境 window
- 线上环境 linux
- 同一个 mysql
思路
- 措施: 统一本地与线上的时区,如 修改 process.env.tz 或者修改环境变量
- 结果: 无效,依然不一样。
解决方案
connectURL 默认指定 Z 作为 timezone,则统一了本地与线上的结果,此为会话级别的时区设置。
查看源码:
- kysely 会动态生成 db command,由适配器指定的 pool 做执行。
- create pool 可以接受 options 或者 connectURL 传入。
- create pool 中有 timezone 选项,可以传入指定 timezone。
- timezone 默认是 local 或者 Z 或者是 [+-]\d\d:\d\d
参考文档
https://dev.mysql.com/doc/refman/8.4/en/time-zone-support.html