使用 Perl DBIx 在运行时设置 MySQL 时区

Setting MySQL time zone at runtime with Perl DBIx

我有一个 Perl Catalyst 应用程序,它在 MySQL 数据库中存储了一些时间。时间是 TIMESTAMP 类型并使用 NOW() 初始化。

当回读时间时,它们似乎在数据库的默认时区内。但是,当使用 mysql shell 时,我可以通过 SET time_zone = '+03:00'; 轻松设置时区并获得正确的我所在时区的当地时间。

有没有办法在 Catalyst 或 DBIx 中将时间设置为 运行 时间?

我希望能够为不同的用户支持不同的时区,所以仅仅更改数据库的默认时区是不够的。我也知道我可以在从 MySQL 获取数据后在 Perl 中格式化时间,但是 Catalyst、DBIx 和 Template Toolkit 进行了很多自动化操作,因此从数据库中正确获取数据开始会方便很多。

我的一般建议是在您的应用程序中设置日期时间,而不是依赖于数据库服务器的日期时间。如果您不需要知道日期时间设置时的时区,则应将其存储在 UTC 中。如果您以后需要知道时区,则需要使用支持此功能的数据库数据类型,例如 Oracle 中的 'timestamp with timezone'。

请参阅我对 Formatting timestamp field for output in TemplateToolkit 的回答,这似乎是您要问的问题。