使用 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 的回答,这似乎是您要问的问题。
我有一个 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 的回答,这似乎是您要问的问题。