AWS RDS で mysql を使っていたのですが、以前はタイムゾーンを変えることができませんでした。そのため、無理矢理 JST で日付や時刻をセットしている WEB アプリがありました。(Amazon RDS データベースインスタンスのタイムゾーンを変更する方法によると今はサーバのタイムゾーンを変えられるらしいです。)
この環境で動く Java の WEB アプリで mysql connector/j をバージョン 5 系からバージョン 8 系に変更したところ、時刻が正しく UTC でセットされるようになってしまいました。
(current_timestamp などを指定すると UTC でセットされるでしょうから、正しくないのを承知で)無理矢理 JST でセットしてほしいのですが、接続文字列を jdbc:mysql://〜&serverTimezone=Asia/Tokyo のようにすればよいようです。
リファレンス: connector/j reference configuration properties
Changes in Connection Properties によると、8系では、5系にあった、useLegacyDatetimeCode プロパティは削除されました。
念のため、ソースも見てみましたが、動きとしては(詳細まで追ってはいませんが)、次のように動作するのではないでしょうか。
- サーバのタイムゾーン(time_zoneパラメータか?)を取得してそのタイムゾーンに変換しようとします。
- serverTimezone が指定されていると、その値をサーバのタイムゾーンとみなして変換しようとします。
私の場合は、実際そのように動作していました。