2016-12-06 48 views
0

我有一個SQL查詢,其中這樣的語句:MySQL的NOW()似乎正確地比較對我的計算機上的本地日期時間,而不是在部署

其中
WHERE event.`local_time` > NOW() 

local_time是一種非UTC日期時間爲活動地點的時區。這似乎很適合我本地構建的應用程序,但在部署環境中,我們得到了UTC的5小時偏移量(事件發生在實際發生前五個小時)。

這是怎麼回事嗎?

我已經試過這樣的事情:

WHERE CONVERT_TZ(event.`local_time`, venue.timezone, 'UTC') < NOW() 

,但似乎返回任意時間均爲零行。 (注意:我們的時區存儲爲'America/New_York')

任何洞察力都將非常感謝,但特別是對本地計算機和我們的部署環境之間差異的任何解釋都會非常有幫助。

謝謝!

回答

1

看起來你打算使用命名的時區(「venue.timezone」)。確保「mysql.time_zone」表在兩端都以相同的方式填充。

要測試是否將時區信息加載到MySQL: 現在選擇(),CONVERT_TZ(now(),'UTC','America/New_York'); 如果您在第二列中得到NULL - 您沒有加載時區。

對於Linux,您可以通過執行以下操作在mysql數據庫中填充與時區相關的表: mysql_tzinfo_to_sql/usr/share/zoneinfo | mysql -u U_S_E_R -p mysql

並再次測試雙方。

1

確保兩地以下查詢的結果是一樣的:

SELECT @@global.time_zone, @@session.time_zone; 

如果不是,您可以送花兒給人設定全球時區有:

SET GLOBAL time_zone = timezone; 
or 
per connection with: 
SET time_zone = timezone; 

檢查MySQL docs爲時區主題(根據您的情況選擇合適的MySQL版本)。

+0

我得到SYSTEM,系統爲我的本地構建和實時數據庫 – tcmoore

相關問題