Oracle9iで利用できるキャラクタ・セット
Oracle9iで日本語を扱う場合、表にあるキャラクタ・セット(Oracle上の文字コード)が選べます。表にあるキャラクタセット以外にもIBM漢字コード(JA16DBCS)、MacintoshのSJIS(JA16MACSJIS)などが選択できますが、利用機会はほとんどないので以降の説明では省略します。
(表)Oracle9iで指定できる、日本語が扱える主要キャラクタ・セット
| キャラクタセット |
文字コード |
備考 |
| JA16SJIS |
シフトJIS |
|
| JA16EUC |
日本語EUC |
|
| JA16SJISTILDE |
シフトJIS |
ウェーブ・ダッシュ(〜)問題が起り得る環境で使用。R9.0.1.4以上で指定可 |
| JA16EUCTILDE |
日本語EUC |
| UTF8 |
UnicodeのUTF-8エンコーディングの緩やかなインプリ |
Unicodeで古いオラクルとの互換性を重視する場合に利用 |
| AL32UTF8 |
UnicodeのUTF-8エンコーディングの厳密なインプリ(Oracle9iR1よりサポート) |
Oracle9iでUnicodeを扱う際の基本 |
キャラクタ・セットを決める観点
(1)日本語・英語以外の文字を同時に扱う必要があるか?
例えば中国語やポルトガル語などを日本語と同時に扱う必要がある場合、SJISや日本語EUCでは中国語やポルトガル語は扱えません。このような場合にはUnicodeが扱えるAL32UTF8を利用してください。Oracle8i以前からのデータで下位互換性を重視する場合はUTF8を利用します。
(2)DBを作成するマシンのOSに合わせる
WindowsあるいはHP-UX, AIXの場合、OSで扱う基本の文字コードがSJISですので、JA16SJISあるいはJA16SJISTILDEを利用します。その他のOS(Solaris,
Linux等)ではOSで扱う基本の文字コードが日本語EUCですので、JA16EUCあるいはJA16EUCTILDEを利用します。
ただし、昨今のシステムはクライアント側がほぼSJISです。Oracle9iはサーバー側とクライアント側のキャラクタ・セットの指定が同じだと文字コード変換しませんので、本来Oracle9iがハンドリング対象外としている外字領域を利用している文字なども無変換で通ります。結果、いわゆる機種依存文字なども扱えるようになります。このことから、Solaris,
Linux等でもJA16SJISあるいはJA16SJISTILDEを利用することも多いです。
(3)ウェーブ・ダッシュ(〜)問題を解決する必要はある?
Windows環境でODBC, oo4oなど一部のミドルウェア環境で「〜」が文字化けする問題に遭遇された方は多いかと思います。これは、ODBC, oo4oなど内部で一旦Unicodeに変換するミドルウェアにおいて、「〜」という文字に対するSJISとUnicodeのマッピングがOracleとMicrosoftの間で異なっているためです。この問題への対応として、R9.0.1.4より新しいキャラクタセット「JA16SJISTILDE」「JA16EUCTILDE」を用意し、サーバー・クライアントともにこれらのキャラクタ・セットを指定することで問題解決が可能になります。これらのキャラクタ・セットが使えない、もしくは明確に「〜」の入力の必要のないシステム以外では「TILDE」つきのキャラクタ・セットを使用するようにしてください。
各国語キャラクタ・セットについて
各国語キャラクタセット(create database文のnational character set句で指定するキャラクタセット。NCHAR型やNVARCHAR2型、NCLOB型などで使用される文字コードです)はデフォルトのAL16UTF16を指定して下さい。古いバージョンのOracleではSJISやEUCなどに対応したキャラクタセットを使用出来ましたが、Oracle9i以降では各国語キャラクタセットはUnicodeが前提となります。 |