LoginSignup
14
13

More than 5 years have passed since last update.

Oracleの内部文字セットがSJISの場合、Javaから文字化けさせずに接続するにはorai18n.jarも必要だとようやく分かったお話

Posted at

泣きたくなるほどハマり時間を浪費してしまったので、この悲劇を繰り返さないために。

背景

とあるJavaのWebアプリを仮想環境へと移行したら動かなくなっていた、というものについて調査。
見てみるとOS,Java,Webサーバがすべて旧環境と異なるという状態だった。
エラーとしては、”???”という文字列をパースできません、と言う内容だった。
この時点で文字コード関連だという判断はできていたが、どこが原因箇所かは最後になるまで分からなかった。

原因だったもの

Oracleの内部キャラセットがSJIS(EUCも?)の場合は、文字化けを起こさずに接続するために
JDBCだけでなくorai18n.jarというjarファイルが必要(使用するOJDBCと同じバージョン)。
これが足りなかった。
これを配置した後再起動すると正常に動作するようになった。
知っていれば真っ先に確認し対応できた問題。いわゆる「知ってりゃ5分で解決できる問題」

やったこと

  • Javaのバージョンを同じに
  • Webサーバのバージョンを同じにしようとしたがセキュリティの関係で断念
  • JVMのオプションのLANGとかDfileencodingとかも色々変更
  • NLS_LANGを色々変更
  • ソースの文字コード、View側の表示文字コード、いろんなとこの文字コードを確認
  • どうやっても解決しないので頭を抱えてうぐぐと唸る

結果的に解決までほぼ丸2日かかってしまった。

勉強になったこと

  • orai18n.jar、超重要。

  • 文字コード問題は本当に原因箇所となりえるものが多くてつらい。

  • 基礎知識足りてない。これはOracleにある程度詳しければ知識として得られていたはず。
    OracleBronze(Bronzeしか持ってないんです。。)の資格が泣いている。

14
13
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
14
13