我有一個腳本,必須像任務一樣執行「Google Analytics」。 基本顯示用戶的訪客統計信息。如何處理MySQL中的時區?
我想在請求它的用戶的時區中生成報告。
到目前爲止,我已經寫了代碼如下:
SET time_zone = timezone;
它做什麼它設置每每個MySQL連接的時區。如果用戶使用timestamp
檢索數據,則時間戳將轉換爲連接的時區。我在時間戳中存儲UTC。
所以一切似乎工作。但有些人說這是一種錯誤的做法。由於多個用戶無法使用不同的time_zone
設置連接到數據庫。
但MySQL doc說:
每個連接的時區。每個連接的客戶端都有自己的時間 區域設置,由session time_zone變量給出。最初, 會話變量需要從全局的time_zone變量, 它的價值,但客戶端可以改變自己的時區,這個說法
但是他們一直堅持認爲你不應該在MySQL的時區做任何事所有。你應該在你的(例如)PHP代碼中完成這一切。 Here對此答案有類似的問題。
但是我怎麼能在PHP代碼中做到這一點?我的意思是我知道如何用PHP中的時區轉換時間,但它不像我檢索單個行。
我對迄今在timestamp
領域檢索數千行和一羣人:
SELECT ...
FROM logs
WHERE
user_id = :user_id
AND timestamp >= CURDATE()
GROUP BY DATE(timestamp)
據MySQL正在使用時間戳的索引,因爲我有幾百萬是非常重要的。即使我在時間戳GROUP BY DATE(timestamp)
上使用函數,該索引是否也能正常工作?如果不是我能如何完成這個?
那麼我應該怎麼做呢?我會非常感謝一些建議。
來自客戶端的時間戳應已轉換爲gmt。儘管當地時間不是,倫敦電腦和香港電腦的時間戳應該是一樣的。這有助於澄清要做什麼嗎?基本上什麼都沒有。客戶應該做這些草率的工作。 – Octopus
DB上唯一要做的就是定義一個時區(也許是UTC),所有數據都存儲在這裏,就是這樣。在PHP中進行轉換。 – ToBe