首頁 >資料庫 >mysql教程 >Java連接MySQL資料庫時如何正確處理時區?

Java連接MySQL資料庫時如何正確處理時區?

Susan Sarandon
Susan Sarandon原創
2025-01-03 09:41:40340瀏覽

How Can I Correctly Handle Timezones When Connecting Java to a MySQL Database?

在 Java 資料庫連線中變更 MySQL 時區

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 伺服器的時區,導致混亂。

MySQL 時區模糊性

例如,當設定為 EST 時,MySQL 可能會抱怨伺服器時區模糊。要解決此問題,請在連接 URL 中指定準確的 EST 時區:

jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York

僅當 MySQL 引發歧義問題時才需要這樣做。

以上是Java連接MySQL資料庫時如何正確處理時區?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn