文字化けに関するトラブルに強くなる【基礎編】
・Oracleにおける文字コードの扱い
データベースキャラクタセット
NLS_LANG
文字コード変換
・文字化けの原因と対処
文字化けの典型的な発生パターン
(関連キーワード:データベースキャラクタセット、NLS_LANG、文字化け、Unicode、シフトJIS、日本語EUC)
NLS_LANG
Oracleに接続するクライアントでは、クライアントの動作環境に応じて適切にNLS_LANGパラメータを設定する必要があります。NLS_LANGとは、多言語環境の動作設定を規定するパラメータです。NLS_LANGは3つのコンポーネントから構成されます。
書式 NLS_LANGNLS_LANG = <LANGUAGE>_<TERRITORY>.<CHARACTERSET>
| コンポーネント | 説明 |
|---|---|
| LANGUAGE | Oracleのメッセージ、ソート、曜日名および月名に使用する言語などの規則を指定します |
| TERRITORY | デフォルトの日付、通貨単位および数値書式などの規則を指定します |
| CHARACTERSET | クライアント・アプリケーションが使用するキャラクタセットを指定します |
UNIXプラットフォーム上では、NLS_LANGはシェルの環境変数として設定します。Windowsプラットフォームでは、NLS_LANGはレジストリ内で設定しますが、環境変数として設定することもできます。
NLS_LANGの各コンポーネントの中で、文字コードに関連するのがCHARACTERSETコンポーネントです。CHARACTERSETコンポーネントには、表 2に示したデータベースキャラクタセットと同様の設定値から選択することができます。しかし、設定する値自体は、データベースキャラクタセットと同じにするのではなく、クライアント環境がサポートしているキャラクタセットを指定しなくてはなりません。
例えば、データベースキャラクタセットがJA16EUC(日本語EUCに相当)であるデータベースにWindows環境から接続する場合、NLS_LANGのCHARACTERSETコンポーネントには、JA16SJIS(またはJA16SJISTILDE)を指定しなくてはなりません注2。Windows環境は一般に日本語EUC文字コードに対応していませんから、JA16EUCを指定すると文字化けなどの現象が発生する場合があります。
なお本稿では、「NLS_LANGパラメータのCHARACTERSETコンポーネント」を「NLS_LANGのキャラクタセット」と略記します。
文字コード変換
このように、クライアントの動作環境に合わせてNLS_LANGのキャラクタセットを指定すると、データベースキャラクタセットとNLS_LANGのキャラクタセットが異なる場合が出てきます。この場合、Oracleは自動的に文字コードの変換を行います。
図3 クライアント、データベース間の文字コード変換
文字コードの変換は、一部の例外を除き、Oracleクライアント側で実行されます。これは、文字コード変換に伴う処理負荷の影響をOracle Databaseに与えないためです。
なお、Oracle クライアントからOracle Databaseに対して文字データを送信する場合の文字コード変換はクライアント側で以下の手順で実行されます。
- Oracleクライアントから入力された文字データをいったんUnicodeに変換する
- Unicodeからデータベースキャラクタセットに対応した文字コードに変換する
- Oracle Databaseに文字データを送信する
逆にOracle Databaseからクライアントに対して文字データを送信する場合も、同様にいったんUnicodeを経由してデータベースキャラクタセットからNLS_LANGのキャラクタセットへの文字コード変換が実行されます。
このように文字コードの変換は、Unicodeを中継して行われます。図4ではその例として、キャラクタセットJA16SJIS、JA16EUC、JA16SJISTILDE間で文字コード変換を行った場合の、変換の仕組みを示しています。
例えば、JA16SJISからJA16EUCに変換する場合は、シフトJISとUnicodeの変換表を基にいったんUnicodeに変換し、次に日本語EUCとUnicodeの変換表を基にUnicodeから日本語EUCに変換するという手順を取ります。JA16SJISからJA16SJISTILDEといった変換でも同様の流れとなります。
図4 文字コード変換と変換表(クリックで拡大)
ただし、データベースキャラクタセットとNLS_LANGのキャラクタセットが同じ場合、Oracleは例外的に文字コードの変換を行いません。
文字化けの原因と対処
さて、Oracleにおける文字コードの扱いが分かったところで、一般的な文字化けの発生原因と対処について整理します。
文字化けの典型的な発生パターン
Oracleの文字コード処理において、文字化けが発生する可能性がある典型的なポイントを以下にまとめました。
図5 文字化けの主な発生ポイント
では、順々に説明してゆきましょう。なお、以下の説明では、最も一般的な発生要因について触れています。文字化けはさまざまな要因で発生しますので、以下の説明以外の要因でも発生する可能性がありますから、状況に応じてより詳細な問題の切り分けを行ってください。ただし、ここで説明する問題の切り分けは、一般的な発生要因以外の場合でも有効な方法です。
| 2/3 |
文字化けに関するトラブルに強くなる【基礎編】
文字コードとは?
Oracleにおける文字コードの扱い
NLS_LANG
文字コード変換
・文字化けの原因と対処
文字化けの典型的な発生パターン
データ取得場面での文字化け
データ表示場面での文字化け
| Oracleトラブル対策の基礎知識 |
TechTargetジャパン
- IBMが歴史を変える!? 新カテゴリの製品を発表 (2012/5/25)
IBMは新たな製品カテゴリとなる「PureSystems」を発表。DB2 10とビッグデータの関係、PureSytemsの斬新さはどこかに迫ります - クラウド時代のデータ処理を支える分散KVSの可能性 (2012/5/23)
現在、高速データ処理の主流はインメモリ型データ処理だが、別の方法として分散KVSが注目を集めている。今回は分散KVSについて話を聞いた - 複数の表からデータを取り出して表示させる(2) (2012/4/23)
前回はSQLの基本的な結合構文について説明しました。今回は、より複雑な自己結合や外部結合について説明します - SQL Server、OOWにIQ、盛りだくさんの4月 (2012/4/20)
オラクルオープンワールドが3年ぶりに東京で開催されたほか、SQL Server 2012が提供開始されるなど、今月は話題が盛りだくさんです
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
