mysql一個時區引發的問題
近期有客戶反饋了一個問題,在使用ERP 2BizBox的過程中,發現如下問題:
在查看財務模塊的報表損益表的時候,修改時間參數,損益報表的數據沒有改變。
經過多方查證,最終發現2BizBox 本身的查詢並沒有問題,而是由於客戶修改了系統的默認時區導致的。
具體是什麼問題,請聽我細細道來:
www.2cto.com
2BizBox在處理損益表的查詢的時候,由於涉及到了多個表的查詢,應該算是一個比較重的查詢,所以會首先從多個表裡面把數據查詢下來,並緩存在一個臨時表裡面;這樣下次在查詢的時候,會有一個查詢時間間隔的判斷,如果本次的查詢時間比上一次查詢的時間大的數值間隔小於3秒,就會從臨時表裡面直接取出數據,這樣處理是為了防止同一個用戶同時多次查詢,給系統造成負擔。上一次的查詢時間保存在數據庫的,本次查詢時間就是系統的當前時間,這樣在正常的系統是可以穩定的執行的。那麼如果服務器操作系統與數據的時區設置不一致的時候,就會有可能導致本次查詢的時間反而小於上次查詢時間,應此就會從臨時表裡面去取數據,而不會更新臨時表的數據。
比如數據庫的時區是CST(UTC -6 hours),操作系統時區:CDT(UTC -5 hours),這樣就會導致系統的時間數據庫的時間一個小時。這樣如果在一次查詢之後,在改變查詢參數的時候,如果相隔的時間在一個小時之類,都不會更新數據,所以就出現了改變查詢參數而報表數據不變的情況。
解決的方法當然就很簡單:把mysql的時區和系統時區調整成一致。
作者 netcy