MySQL 使用「GMT 8」時區運行,而 Tomcat 使用「GMT」。將 datetime 儲存到資料庫時,數值可能看起來是正確的,但在檢索時,會出現「GMT」值。此外,從資料庫檢索的值會轉換為“GMT”,這表示資料庫將它們視為“GMT 8”。
useTimezone 參數是一個過時的解法。對於現代解決方案,請設定 useLegacyDatetimeCode=false 並升級至最新的 mysql JDBC 連接器。連接 URL 範例:
jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false
如果 useLegacyDatetimeCode 設定為 false,則會呼叫 newSetTimestampInternal() 方法。如果提供的 Calendar 為空,則日期物件的格式為資料庫時區:
this.tsdf = new SimpleDateFormat("''yyyy-MM-dd HH:mm:ss", Locale.US); this.tsdf.setTimeZone(this.connection.getServerTimezoneTZ()); timestampString = this.tsdf.format(x);
要擷取日期,請使用 getTimestamp(int) 而不使用 Calendar。同樣,資料庫時區將用於建置日期。
網路伺服器的時區現在與格式無關。如果 useLegacyDatetimecode 保持 true,則使用 Web 伺服器的時區,導致混亂。
例如,當設定為 EST 時,MySQL 可能會抱怨伺服器時區模糊。要解決此問題,請在連接 URL 中指定準確的 EST 時區:
jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York
僅當 MySQL 引發歧義問題時才需要這樣做。
以上是Java連接MySQL資料庫時如何正確處理時區?的詳細內容。更多資訊請關注PHP中文網其他相關文章!