tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

OracleをShift JISからUTF-8/UTF-16へ移行する時の問題点

今JA16SJISTILDE(Shift JIS)で運用しているDBをAL32UTF8(UTF-8)かAL16UTF16(UTF-16)に変更しようという話が出てきているので、何が問題になりそうかメモしてみる。
きっと他にもあるので後で追記する。

格納データ量が増える

1.5倍〜2倍程度には増える。
これはしかたない。

CHAR/VARCHARに格納できる文字数が減る

文字列型の格納方法をバイト単位(バイト・セマンティクス)から文字数単位(キャラクタ・セマンティクス)にすれば、むしろ格納文字数は増える。しかし、アプリのバリデーションがアホだと本来ORAエラーにより水際で防いでいた部分も格納されるようになるため、データ連係時に問題が出そう。

バイト数から描画エリアを判断できなくなる

例えば等幅フォントで全角50文字しか入らないエリアがあるとすると、そこに収めるための処理はアプリが実装することになる。Shift JISの場合だとほぼバイト数でちぎるだけで事足りるため、既存アプリでは考慮してないことが多い。
(というか、これがShift JISの数少ない良い点なんだろう)

Unicodeのバージョンアップが半強制になる

Oracle上では同じ文字コード名でも、製品のバージョンによって対応するUnicodeのバージョンが異なる。AL32UTF8の場合だと以下のようになっている。

つまり、OracleをバージョンアップするとUnicodeもバージョンアップしてしまう。
バックエンドのシステムが付いて来れないことになりそう。

Object Browserが対応していない

FAQに書いてあった。
http://www.sint.co.jp/products/siob/ob/faq/faq.html