泣きたくなるほどハマり時間を浪費してしまったので、この悲劇を繰り返さないために。
背景
とある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しか持ってないんです。。)の資格が泣いている。