我正在将一个Web应用程序(PHP 7.3 / PostgreSQL 11)移动到新服务器上。
除了一点以外没有什么特别的:时区差异
我没有特权在新服务器上更改该设置。
由于许多表使用NOW()作为许多“没有时区的时间戳”字段的默认值,并且许多查询也使用NOW()或CURRENT_TIME,所以我想更改数据库的默认时区。
我当时在考虑通过执行ALTER database my_db SET timezone ='Europe/Brussels'
来设置数据库的默认时区,但是我在Heroku(https://help.heroku.com/XKRPVR53/how-to-change-timezone-for-postgres)上看到了此注释,这似乎是一种不好的做法。
设置数据库的时区真的不是一个好习惯吗?
为完整起见,此Web应用程序是特定于国家/地区的,它不使用其他时区的日期/时间。
在此先感谢您的提示!
答案 0 :(得分:2)
我不同意Heroku。
使用PostgreSQL管理时区非常好。您只需记住timezone
是 client 时区。设置默认值没有错,但是每个会话都应该正确设置参数。
我认为有两种好的架构:
管理数据库中的时区,并始终使用timestamp with time zone
。
在应用程序中管理时区,并始终使用timestamp without time zone
。
混合这些策略通常会导致问题。