Rails中的時區和Mysql查詢問題

2021-08-30 03:21:19 字數 1127 閱讀 2313

如果,在你的rails專案中資料庫的設定是如下:

config.active_record.default_timezone = :utc#rails2.1

config.time_zone = 'utc'#rails 2.3

那麼通常情況下,這時你就要注意你的rails查詢中的時區問題了。

例如,通常的查詢如下:

user.count(:conditions => ['created_at between ? 

and ?',some_day.beginning_of_day,

some_day.end_of_day])

這時候是不用特別註明時區的。可是如果,有如下的顯示的時候。

some_day.beginning_of_day

#>e.g. 00:00 on march 26th cet

你就應該用如下的方式查詢

user.count(:conditions => ['created_at between ? 

and ?', some_day.beginning_of_day.utc,

some_day.end_of_day.utc])

user.count(:group => 'date(convert_tz(created_at, "utc", "cet"))')

也就是說,如果不這樣寫的話預設的就會用utc的時間來分組,很可能就是你在3月26號00:59 cet建立的記錄,就會分組到25號了。

那麼,如何設定mysql的時區呢,如下:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

mac如下

mysql_tzinfo_to_sql5 /usr/share/zoneinfo | mysql -u root mysql

當然你也完全不必轉換,那麼你需要在程式裡轉utc或特別處理

修改Docker中Mysql的時區

1 mysql 檢視linux時區 date r 檢視mysql的時區 show variables like time zone 檢視當前時間 select now 設定全域性 set global time zone 8 00 設定當前會話 set global time zone 8 00 立...

docker中的mysql時區修改

背景 時區是使用了世界標準時間 utc 因為在中國使用,所以需要把時區改成東八區的 或者啟動容器時設定 e tz asia shanghai 進入容器 docker exec it mysql5.7 bash date r 修改時區 cp usr share zoneinfo prc etc loc...

mysql 時區設定 MySQL修改時區的方法小結

說明 這裡總結記錄修改mysql時區的三種方法。方法一 通過mysql命令列模式下動態修改 1.1 檢視mysql當前時間,當前時區 select curtime 或select now 也可以 curtime 15 18 10 show variables like time zone varia...