広く使用されている7ビットまたは8ビットのASCIIおよびEBCDICのキャラクタ・セットは、英数字を表すには十分ですが、日本語のようなアジアの言語には数千もの文字が含まれる場合があります。これらの言語では、1文字を表すために16ビット(2バイト)以上が必要です。Oracleではこうした様々な言語がどのように処理されるかについて説明します。
Oracleには、シングルバイトおよびマルチバイトの文字データを処理し、キャラクタ・セット間で変換できるように、グローバリゼーション・サポートが用意されています。また、アプリケーションを異なる言語環境で実行することもできます。グローバリゼーション・サポートでは、数値書式および日付書式はユーザー・セッション用に指定された言語規則に自動的に適応します。したがって、グローバリゼーション・サポートにより、世界中のユーザーがそれぞれの母国語でOracleとやりとりできます。
様々なグローバリゼーション・サポートまたはNLSパラメータを指定して、言語によって異なる機能の操作を制御できます。これらのパラメータのデフォルト値は、Oracle初期ファイルで設定できます。グローバリゼーション・サポート・パラメータには、各グローバリゼーション・サポート・パラメータに指定された内容が表示されます。
表4-6 グローバリゼーション・サポート・パラメータ
グローバリゼーション・サポート・パラメータ | 指定内容 |
---|---|
NLS_LANGUAGE |
言語によって異なる表記法 |
NLS_TERRITORY |
地域によって異なる表記法 |
NLS_DATE_FORMAT |
日付書式 |
NLS_DATE_LANGUAGE |
日および月の名前に使用する言語 |
NLS_NUMERIC_CHARACTERS |
10進数文字およびグループ・セパレータ |
NLS_CURRENCY |
各国通貨記号 |
NLS_ISO_CURRENCY |
ISO通貨記号 |
NLS_SORT |
ソート基準 |
主なパラメータは、NLS_LANGUAGEおよびNLS_TERRITORYです。NLS_LANGUAGEでは、言語によって異なる次の機能のデフォルト値を指定します。
サーバー・メッセージの言語
曜日と月の名前に使用する言語
ソート基準
NLS_TERRITORYには、地域によって異なる機能のデフォルト値を指定します。この機能には次が含まれます。
日付形式
小数点文字
グループ・セパレータ
各国通貨記号
ISO通貨記号
パラメータNLS_LANGを次のように指定して、ユーザー・セッション用に言語ごとに異なるグローバリゼーション・サポート機能の操作を制御できます。
NLS_LANG = <language>_<territory>.<character set>
languageにはユーザー・セッション用のNLS_LANGUAGEの値、territoryにはNLS_TERRITORYの値、character setには端末に使用されるコード体系を指定します。コード体系(通常はキャラクタ・セットまたはコード・ページと呼ばれる)は、端末で表示可能なキャラクタ・セットに対応する数値コードの範囲です。これには、端末との通信を制御するコードも含まれています。
NLS_LANGは、環境変数(または使用しているシステムでこれに相当するもの)として定義します。たとえば、Cシェルを使用するUNIXでは、NLS_LANGを次のように定義できます。
setenv NLS_LANG French_France.WE8ISO8859P1
Oracleデータベース・セッション中に、グローバリゼーション・サポート・パラメータの値を変更できます。ALTER SESSION文を次のように使用してください。
ALTER SESSION SET <globalization support_parameter> = <value>
Pro*C/C++では、グローバリゼーション・サポート機能がすべてサポートされているため、アプリケーションではOracleデータベースに格納されている外国語データを処理できます。たとえば、外国語の文字変数を宣言し、それをINSTRB、LENGTHBおよびSUBSTRBなどの文字列関数に渡すことができます。これらの関数の構文は、それぞれINSTR、LENGTHおよびSUBSTR関数と同じですが、文字単位ではなくバイト単位で機能します。
関数NLS_INITCAP、NLS_LOWERおよびNLS_UPPERを使用して、大/小文字変換の特別なインスタンスを扱うことができます。さらに、関数NLSSORTを使用して、バイナリ順序ではなく言語上の順序でWHERE句の比較を指定できます。グローバリゼーション・サポート・パラメータをTO_CHAR、TO_DATEおよびTO_NUMBER関数に渡すこともできます。グローバリゼーション・サポートの詳細は、Oracle Databaseアドバンスト・アプリケーション開発者ガイドを参照してください。