[質問]
NLS_LANG設定のヒント
[対象となる製品のバージョン]
OSに依存しない
[対象となるパッケージ]
すべてのOracleデータベース
[回答]
NLS_LANGは、Oracleにおいて、表示する文字コードやメッセージの言語、日付の表示形式などを決定する重要な環境変数です。
「言語_地域.キャラクタセット」
のように指定します。NLS_LANGに「Japanese_Japan.JA16EUC」と指定した場合、日本語のメッセージが選択されるため、コンソール上でOracleを使用すると文字化けが発生します。これはX Windowを起動する前の標準コンソールが日本語に対応していないためです。konを使用すればコンソール上でも日本語を表示できますが、データベースの自動起動/停止時のメッセージは、コンソール上に出力されるため、やはり文字化けは発生してしまいます。
この文字化けは表示上の問題なので、使用上の問題はありません。また起動/停止時のログは /var/log/boot.log に保存されるので、あとで確認することもできます。しかしながら、メッセージ類は英語のほうが使いやすいという方も多いでしょう。メッセージを英語にすることで、自動起動/停止時の文字化けの問題を回避できます。メッセージを英語表示にするときには、NLS_LANGに次のいずれかの値を設定します。
- American_America.JA16EUC
メッセージは英語。日付の形式は米国式(DD-MON-YY)。表示する言語は日本語EUC。
- American_Japan.JA16EUC
メッセージは英語。日付の形式は日本式(YY-MM-DD)。表示する言語は日本語EUC。
ただし前者の場合、地域(NLS_LANGの2番目の部分)もAmericaになっているので、日付のデフォルト表示形式は米国式になり、次のSQL文は失敗します。
INSERT INTO foo VALUES('02-12-31')
なぜならば米国の日付フォーマットでは、'31-DEC-02'という入力を期待しているからです。American_Americaに指定した場合、メッセージが英語になるだけでなく、日付や通貨の表示形式も米国式になります。この問題を解決する方法は、TO_DATE関数やNLS_DATE_FORMATパラメータを使用するなどがあるのですが、お勧めは「American_Japan.JA16EUC」です。これだとアプリケーションに変更を加えることなく簡単に変更できます。
[参考資料]
特になし
[更新履歴]
2002/12/17 新規作成
|