我一遍又一遍地阅读(否则)优秀的 Mysql2 gem 的文档。
我在以 UTC 运行的服务器上托管了一个生产 Rails 应用程序。应用程序的 config.time_zone 设置为“东部时间(美国和加拿大)”。
我们有一个内部 MS Access 为头的应用程序(幸运的是,它使用了 MySQL 数据库),上述 Rails 应用程序连接到该应用程序以同步产品数据、生产计划等。由于应用程序的限制,该 MySQL 服务器无法移入云中,而且——不用说——我们不能将其时区处理更改为 UTC——一切都在 EST 中。
当我从 Rails 应用程序连接到本地数据库以检索数据时,Mysql2(默认情况下)将所有本机数据转换为可消化的 Ruby 对象。但是,我可以让 Rails 应用程序正确解释日期的唯一方法是在 Mysql2 查询命令期间发送 :cast => false,然后在响应处理中对结果运行 Time.zone.parse( string ) . 这需要原生 Ruby 对象转换,这远不如 gem 内置的转换函数那么高效。
我尝试传递文档中提到的 database_timezone 和 application_timezone 选项,但 :local 符号没有使用应用程序的 config.time_zone 属性的预期效果。
thehost.query("SELECT NOW() AS n;", :symbolize_keys => true).each { |result| p result[:n] }
2015-05-19 16:28:41 +0000
thehost.query("SELECT NOW() AS n;", :symbolize_keys => true, :database_timezone => …Run Code Online (Sandbox Code Playgroud)