MySQL の領域では、一般的なタイムゾーン設定「GMT 8」が Tomcat などと衝突することがよくあります。 「GMT」で動作します。ユーザーが観察したように、この不一致は日時値を管理する際にタイムゾーンの複雑な問題を引き起こす可能性があります。
この問題に効果的に対処するには、MySQL JDBC コネクタの内部動作を詳しく調べることが重要です。バージョン 5.1.38 より前では、「useTimezone」として知られる古いパラメータが回避策として採用されていました。ただし、「useLegacyDatetimeCode」パラメータを利用する、より堅牢なソリューションが存在します。
「useLegacyDatetimeCode=false」を明示的に設定し、最新バージョンの mysql JDBC コネクタを利用することで、MySQL の内部メカニズムに次の処理を提供できます。日時値の精度が向上します。次の接続 URL は、このアプローチの例です。
String url = "jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false";
「setTimestamp」メソッドを使用してタイムスタンプを設定する場合は、Calendar パラメーターを省略することが重要です。これにより、Web サーバーの一般的なタイムゾーンに関係なく、日付オブジェクトがデータベースのタイムゾーン設定に従ってフォーマットされるようになります。例:
setTimestamp(1, Timestamp);
このアプローチにより、Web サーバーのタイムゾーンを誤って適用する「setTimestamp(1, Timestamp, Calendar)」の使用によってよく引き起こされる混乱が解消されます。
タイムスタンプを取得するとき、 Calendar パラメーターの使用を控えることも同様に重要です。データベースのタイムゾーンが再びフォーマット プロセスを制御します。
Web サーバーのタイムゾーンがこれらの操作に影響を与えないことは注目に値します。 "useLegacyDatetimecode" が "false" に設定されている限り、データベースのタイムゾーンによって日時値の処理が決まり、全体的な一貫性が確保されます。
場合によっては、MySQL がデータベースのタイムゾーンがあいまいであるとフラグを立てることがあります。これを解決するには、「serverTimezone」パラメータを使用してタイムゾーンを明示的に指定すると明確になります。
String url = "jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York";
これらの手法を実装することで、MySQL の "GMT 8" タイムゾーンと Java の "GMT" タイムゾーンの間で調和のとれた共存を確立できます。これにより、データベース接続における日時値の正確かつ一貫した処理が保証されます。
以上がJava データベース接続における MySQL タイムゾーンの不一致を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。