キャラクタセットと文字コードについて
ORACLEは様々な言語をサポートするデータベースで各国の言語を様々な文字コードで格納することができます。 特定の文字コードを扱うために必要であろう文字コード定義のまとまりをORACLEではキャラクタセットと呼び、データベース作成時に決定します。
キャラクタセットにはデータベースキャラクタセットと各国語キャラクタセットの2種類の設定があり、 データベースキャラクタセットはvarchar2型やchar型へ格納する文字コード、 各国語キャラクタセットはnvarchar型やnchar型列の文字コードとして使用されます。 また、データベースキャラクタセットと各国語キャラクタセットはデータベースの単位で決まっておりテーブル単位等でキャラクタセットを指定することはできず、 日本語キャラクタセットを使用している場合データベース作成後のキャラクタセット変更はほとんどの場合できないため設計には注意する必要があります。
日本語環境で使用するキャラクタセットと文字コードについて
日本で主に使われている文字コードとそのサイズと対応するキャラクタセットは以下の通りです。
文字コード | ASCII文字 | 主な日本語文字 | 半角カナ | 対応するキャラクタセット |
SJIS | 1byte | 2byte | 1byte | JA16SJIS、JA16SJISTILDE ※1 |
EUC | 1byte | 2,3byte | 2byte | JA16EUC、JA16EUCTILDE |
UTF-8 | 1byte | 3byte ※2 | 3byte | AL32UTF8、UTF8 |
UTF-16 | 2byte | 2byte | 2byte | AL16UTF16 ※3 |
※2・・・一部記号(「Э」や「д」等)は2byte
※3・・・データベースキャラクタセットには設定できません。(各国語キャラクタセットのみ)
キャラクタセットの選択
以下のような観点で決定します。
・扱う可能性がある文字にすべて対応している
・1文字あたりのBYTE数が少ない
・OSの文字コードやアプリケーションの文字コードと一致する
例えば、JA16SJISやJA16EUCでは韓国語やフランス語等の文字が格納できないため、 これらの文字を格納する可能性がある場合はAL32UTF8等のユニコードをサポートしたキャラクタセットを選択します。
また、9i頃まではWindows環境であればJA16SJIS(TILDE)を選択するのが一般的でしたがWindows Vista や 7 等ではサロゲートペア文字等がサポートされていることや、 WEBアプリケーション等からJDBC経由で接続する形態が非常に多くなっているといった背景から現時点では文字化けの問題を防ぐ上でもAL32UTF8を選択するのが無難です。 ただし、AL32UTF8では日本語文字が1文字3バイト以上になることからSJIS環境から移行する場合はパフォーマンス問題とテーブル定義変更についてあらかじめ考慮しておく必要があります。
マニュアル
・マニュアル一覧・グローバリゼーション・サポート・ガイド