LoginSignup
0
0

More than 5 years have passed since last update.

JDBC経由でOracle DatabaseのTIMESTAMP WITH TIME ZONEにInsertすると、TZR形式でInsertされる場合がある

Last updated at Posted at 2018-08-09

環境

Oracle JDBC Thin Driver 12.1.0.2 (ojdbc7.jar利用)
JDK 8

事象

JDBC経由でOracle DatabaseのTIMESTAMP WITH TIME ZONEにUTC形式でInsertしたいのに、TZR形式でInsertされる場合がある
例えば下記のようなSQLをSQL*PlusでInsertした場合と、JDBCでInsertした場合に差異が発生する。
insert into test_update values(22,'2018-07-25 19:24:46.792')

・SQL*Plus inset結果
25-JUL-18 07.24.46.792000 PM +09:00
・JDBC経由 inset結果
25-JUL-18 07.24.46.792000 PM ASIA/TOKYO
※TIMESTAMP WITH TIME ZONEのカラムのみ抜粋

解決策

1.書式を明記してInsert
insert into test_update values(24,'2018-07-25 19:24:47.323','25-JUL-18 03.16.54.752000 PM +09:00);

2.セッションのtime_zoneをUTC指定にする
下記alter文を発行してInsert
alter session set time_zone='+09:00'

3.プログラム実行時にtime_zoneをUTC指定にする
java -Duser.timezone=+09:00 ...

備考

java VMのローカルタイムゾーンが使用されており、そこがtime_zone='ASIA/TOKYO'と同義の設定を行っているのかなと思っているが、だれがどこで制御しているのかまでは追えていない

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0