ホームページ >データベース >mysql チュートリアル >Java を MySQL データベースに接続するときにタイムゾーンを正しく処理するにはどうすればよいですか?

Java を MySQL データベースに接続するときにタイムゾーンを正しく処理するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-03 09:41:40263ブラウズ

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() メソッドが呼び出されます。指定されたカレンダーが null の場合、日付オブジェクトはデータベースのタイムゾーンでフォーマットされます。

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) を使用します。ここでも、日付の作成にはデータベースのタイムゾーンが使用されます。

Web サーバーのタイムゾーンの無関係

Web サーバーのタイムゾーンは書式設定に無関係になりました。 useLegacyDatetimecode が true のままの場合、Web サーバーのタイムゾーンが使用され、混乱が生じます。

MySQL タイムゾーンの曖昧さ

MySQL は、たとえば EST に設定されている場合、サーバーのタイムゾーンの曖昧さについて警告する可能性があります。これを解決するには、接続 URL で正確な EST タイムゾーンを指定します:

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

これは、MySQL で曖昧さの問題が発生した場合にのみ必要です。

以上がJava を MySQL データベースに接続するときにタイムゾーンを正しく処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。