數據庫時間與北京時間相差幾小時(常見典型包括8、13、14小時)該如何解決?
更新時間 2023-12-26 01:30:24
最近更新時間: 2023-12-26 01:30:24
分享文章
本文介紹數據庫時間與北京時間相差幾小時該如何解決。
問題現象
用戶通過MySQL JDBC客戶端連接DRDS實例執行SELECT查詢,發現表中字段類型為timestamp的字段返回的時間與北京時間相差幾個小時,比較常見的包括8小時、13小時、14小時等(1-24小時都可能)。
排查方法
- 查看DRDS的MySQL實例的時區配置,比如show global variables like '%time_zone%',確認MySQL當前的時區配置。
- 查看當前JDBC客戶端的連接參數,是否設置severTimezone參數。
- 對比MySQL和JDBC客戶端的時區配置是否合理。
原因分析
- 本質原因是:MySQL實例的時區和JDBC客戶端的時區設置的不一樣,導致出現誤差。
- 如數據庫時間與北京時間相差8小時,可能是MySQL的system_time_zone參數為UTC,time_zone為SYSTEM,而北京時間為UTC+8:00,比UTC快8小時,因此可能看到差8個小時。此時,可以修改MySQL實例的time_zone參數為Asia/Shanghai,或者在JDBC驅動中設置severTimezone參數為Asia/Shanghai。
- 如數據庫時間與北京時間相差13或14小時,可能是MySQL的system_time_zone參數為CST,time_zone為SYSTEM,JDBC 連接到 MySQL 把 CST 時區識別成了美國中部標準時間(UTC-6:00,即比UTC慢8小時,夏令時為UTC-5:00),而北京時間比UTC快8小時,因此可能看到差14個小時(夏令時為13小時)。
- 同理,發現時差為其他情況的(1-24小時皆有可能),本質也是時區設置問題。
解決方法
修改MySQL實例的時區配置,或者在MySQL JDBC驅動連接參數中主動配置severTimezone參數,確保客戶端和MySQL實例時區一致。