Oracle JIS2004対応(DB設定周り)

投稿者: | 9月 21, 2011

以下の話は、パターンBを採用した時の話です。

OracleでJIS2004対応をするには、どうしたら良いのかがわからず、ここ1週間ほど時間を見つけて調査をしてきた。会社の環境が貧弱なので、自宅マシーンで評価しようとしてOracleインストールに失敗して、ついかっとなりOS再インストールとかしたりした。おかげでWin7 の64ビットデビューしちゃったよ。

まぁ前起きはこれぐらいにして、本題。「Oracle JIS2004 対応方法」とかで検索すると参考にて提示したリンクが出てきてなーんとなくは理解できるのだが決定的な理解に至らず、悶えた。実機で評価し、ようやく理解できた。

追記(2010/06/20):AP周りで考慮すべきことが残っていたので「Oracle JIS2004対応(AP周り) – 戦艦ゆにっき」に追記。

JIS X 0213:2004のデータをDBに格納する方法
  1. Oracle Database 10g Release 1(10.1.0)以降のAL32UTF8キャラクタ・セットまたはAL16UTF16各言語キャラクタ・セットのデータベースを利用する。
  2. DBアクセス製品に応じてUnicodeを利用したプログラミングを行う
  3. 開発環境、実行環境がJIS X 0213:2004のデータを取り扱える必要がある
DB周りの補足

上記1がわかりずらい。また検索するとサイトによって記載がぶれていて、本当にあっているのかどうかがわかりにくい。(特に各言語キャラクタ・セットの意味を知らなかったら・・・・)

Oracle DatabaseでJIS2004を扱う為の設定は2種類存在し、どちらかを選択することになる。

  • DBのキャラクタ・セットをAL32UTF8にする。
  • DBのキャラクタ・セットはJA16SJISTILDEにしたまま、AL16UTF16各言語キャラクタ・セットにする。そして、JIS2004を格納したいカラムのデータ型をnvarchar2などの「n~型」を使用し、Unicodeを扱える環境で文字登録すれば良い。
    • NLS_NCHAR_CHARACTERSETをAL16UTF16にする

どちらかで対応すれば良い。たとえば、カラム名に日本語を使っていたりして、DBのキャラクタ・セットを変更したくない場合は、後者を選択することになる。

文字を登録するクライアントについて

JIS2004で拡張された文字を本当に登録できているかを確認するためには、クライアントがJIS2004を扱えなければならない。

自分で調べた範囲では、sql*plusではJIS2004拡張文字は扱えない。なので、SQL Developer(Oracle標準のツール)などを使ってあげる必要がある。

評価結果

評価は、DBキャラクタセットはJISで、各言語セットをUTFで行った。

NAME0はVARCHAR、NAME1はNVARCHAR、NAME2はNCHARのデータ型という構造の表に下のようなSQLを発行しコミットする。挿入したデータは、それぞれ「VistaとXPでフォントの形状が異なる」「XPに対応するフォントが無い文字」「XPに対応するフォントが無いサロゲート・ペア文字」である。

oraclejis2004_0

すると結果は、下のようになる。

oraclejis2004_1

Windows 7にインストールしたOracleにWindows 7上のSQL DeveloperからINSERTした結果である。Windows 7環境でも、N~型ではないNAME0は文字化けしていることを確認できる。

ちなみに参考資料によると、JA16SJISTILDEに格納できない文字を格納しようとしたので「?」として格納される。そして、サロゲート・ペア文字は二文字の「??」として格納される。これを通常のXPで参照すると「・」と文字化けするらしい・・・。

参考

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください