ホームページ >データベース >mysql チュートリアル >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 サーバーのタイムゾーンは書式設定に無関係になりました。 useLegacyDatetimecode が true のままの場合、Web サーバーのタイムゾーンが使用され、混乱が生じます。
MySQL は、たとえば EST に設定されている場合、サーバーのタイムゾーンの曖昧さについて警告する可能性があります。これを解決するには、接続 URL で正確な EST タイムゾーンを指定します:
jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York
これは、MySQL で曖昧さの問題が発生した場合にのみ必要です。
以上がJava を MySQL データベースに接続するときにタイムゾーンを正しく処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。