QA@IT

Oracle11gで文字化け

12620 PV

すみません。Oracle11gで質問があります。
CentOSにOracle11gをインストールしてDB作成し、Windows2003サーバからtnsnames.oraで設定したSIDに、osqleditというSQLツールを使ってDB接続することは可能です。
また、SQLツールでSELECT文を実行しても文字化けもしていません。

2003サーバの文字コードの環境変数NLS_LANGには、「JAPANESE_JAPAN.AL32UTF8」を設定しています。

しかし、Windows2003サーバに配置したWebアプリ(ASP.NETのVB)からログインしてページを見ると、文字化けします。しかし、文字化けの原因がよくわかりません。

考えらえれることなどあればご教授願いますでしょうか。
Webアプリのほうは、Oracle in OraClient11g_home1というODBCドライバでDB接続しています.

11gにDBCharsetをAL32UTF8 にして新しいDBを作り、9iのフルバックアップを11gにリストアしています。
ひょっとしたら9iのFULLバックアップの文字コードがAL32UTF8じゃなかったのかもしれないですが、それが原因として考えられますでしょうか。

回答

まずは普通に2003サーバーにログインしてなんでもいいですがDBにアクセスするツールをつかって(SQLPlusだとかCSEだとか)で文字化けが起きないことを確認してください(インストールが難しければこれは飛ばしても構いません)。

WinFormsやConsoleApplicationで同じドライバでアクセスするプログラムをやはり普通に2003サーバーにログインして実行し、文字化けが起きないことを確認してください。

そこで既に文字化けが起きるのであれば設定(環境変数や接続文字列含む)がおかしいかインポートの段階でデータがすでに変わってしまっている可能性があります。

そこでうまくいくのにASP.NETでだけうまくいかないのであれば、ASP.NETが参照している環境変数なりレジストリなりで正しいNLS_LANGを拾えていないのだと思います。

ASP.NETが動くプロセスは一般ユーザーのものではありませんので、試しにASP.NETから Environment.GetEnvironmentVariables();
を使って環境変数を見てみるといいかもしれません。

編集 履歴 (0)
  • すみません。自己解決しました。Webサーバ側のNLS_LANG環境変数を「JAPANESE_JAPAN.JA16SJISTILDE」にしたら文字化け治りました。元のFULLバックアップのデータがShift_JISだったのかもしれません。ありがとうございました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。