Top / .NET備忘録 / 11.文字列の扱い / 10.ORACLE AL32UTF8 における文字列

こんなテーブルを作って、それぞれの項目に何文字入るか調べてみました。

 CREATE TABLE TBL_VARCHAR2
 (
     ITEM_BYTE                      VARCHAR2(4 BYTE)
 ,   ITEM_CHAR                      VARCHAR2(4 CHAR)
 ,   ITEM_NVARCHAR2                 NVARCHAR2(4)
 )

UTF-8 におけるバイト数

1バイト文字A
2バイト文字Ɛ
3バイト文字
4バイト文字𩸽

格納できる文字数

1バイト文字2バイト文字3バイト文字4バイト文字
VARCHAR2(4 BYTE)4211
VARCHAR2(4 CHAR)4444
NVARCHAR24442

VB6.0(SHIFT-JIS 環境)からの移行を考えると、VARCHAR2(BYTE) → VARCHAR2(CHAR) とするだけで対応できそうです。

NLS_LENGTH_SEMANTICS を CHAR に設定すると、VARCHAR2(4) として定義した項目は、VARCHAR2(4 CHAR)になってくれるので、それを利用することにしました。

4バイト文字(サロゲートペア)をなんとかすれば UTF-8 に対応できそうです。

・4バイト文字を4文字挿入しても、ODP.NET では2文字までしか取得できません。
何か方法があるのかもしれませんが、アプリ側で、半角/全角の桁数チェックをかけているのでヨシとします。

・組み合わせ文字(「ǻ」"\u0061\u030A\u0301" 等)については、普通に文字数分のエリアを消費するので特に処理しないことにします。




トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2013-09-16 (月) 06:37:34 (1430d)