スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

[目次][索引][前へ][次へ]

4.2.3 文字集合を使用した表

文字集合を定義すると,表の列ごとに異なる文字集合の文字列データを格納できます。

<この項の構成>
(1) 文字集合を指定した文字列データの受け渡し
(2) 文字コード変換

(1) 文字集合を指定した文字列データの受け渡し

文字集合を指定した文字列データを受け渡す場合の例について説明します。

(例)
表T1の列C2(文字集合EBCDIK)を検索します。表T1,及び検索SQLを次に示します。
  • 表T1は,次のように定義されています(下線部分が文字集合指定です)。
     
    CREATE TABLE T1
      (C1 INT, C2 CHAR(30) CHARACTER SET EBCDIK)
     
  • 検索SQLは次のようになります。
    <埋込み変数の宣言>
     
    char DATA[31];
        :
    SELECT C2 FROM T1
      WHERE C2 = :DATA
     
この場合のデータの受け渡しの流れを次の図に示します。

図4-8 文字集合を指定した文字列データの受け渡し

[図データ]
[説明]
  1. 列C2の文字集合の情報がディクショナリ表から取得され,SQLオブジェクトに格納されます。
  2. 文字集合名記述領域にC2の文字集合名が設定されます。
  3. 入力変数の文字集合と文字集合名記述領域に設定された文字集合が異なる場合,変換して代入されます。
    出力変数の文字集合と文字集合名記述領域に設定された文字集合が異なる場合,変換して格納されます。
注※
UAP実行時に動的に決定した変数(DATA)の文字集合名の情報を記述した領域のことです。文字集合名記述領域の内容を介して,次の処理が行われます。
  • クライアント側で指定した変数の文字集合名情報をHiRDBサーバに通知する
  • HiRDBサーバで前処理したSQL文の検索項目や,?パラメタの文字集合名情報をクライアント側で受け取る
文字集合名記述領域については,「付録E 文字集合名記述領域」を参照してください。

(2) 文字コード変換

クライアントとサーバの文字集合が異なる場合,サーバ側で文字コードを変換します。クライアントとサーバの両方が既定文字集合の場合,文字コード変換はしません。ただし,クライアント環境定義のPDCLTCNVMODEの指定がある場合は,それに従って変換します。

文字集合の定義の有無と,クライアントとサーバ間での文字コード変換について次の表に示します。

表4-2 クライアントとサーバ間での文字コード変換

クライアント側の文字コード サーバ側の文字コード
SJIS UJIS UTF-8 LANG-C CHINESE CHINESE-GB18030
なし EK なし なし U16 なし なし なし
SJIS なし SVR CLT CLT C-S × ×
EK SVR × × × × × ×
UJIS なし × × × × × ×
UTF-8 なし × × × SVR × ×
U16C × × × SVR × × ×
UCS-2 なし × × CLT CLT C-S × × ×
LANG-C なし SVR SVR
CHINESE なし × × × × × ×
CHINESE-GB18030 なし × × × × × × ×

(凡例)
なし:文字集合を定義していません。
EK:文字集合にEBCDIKを定義しています。
U16:文字集合にUTF16を定義しています。
U16C:文字集合にUTF16,UTF-16LE,UTF-16BEのどれかを定義しています。
SVR:サーバ側で文字コード変換をします。
CLT:クライアント側で文字コード変換をします(クライアント環境定義PDCLTCNVMODEで変換を指定)。
C-S:クライアント側でサーバ側の文字コード変換をして(クライアント環境定義PDCLTCNVMODEで変換を指定),サーバ側で文字集合の文字コード変換をします。
−:文字コード変換が不要です。
△:文字コード変換が不要です。ただし,クライアント環境定義PDCLTCNVMODEにNOUSEを指定している場合は文字コード変換をします(全角文字は変換しません)。
×:文字コード変換ができません。

注※
クライアント側の文字コードとサーバ側の文字コードのエンディアンが異なる場合,エンディアン変換をします。
(a) ODBC対応アプリケーションプログラム,又はADO.NET対応アプリケーションプログラムからのアクセス

ODBC対応アプリケーションプログラム,又はADO.NET対応アプリケーションプログラムからのアクセスの場合も,表4-2の変換規則に従います。

ただし,次に示すクライアントのバージョンでは文字集合名記述領域をそれぞれ仮定します。

クライアントのバージョンが08-05より前の場合
文字集合名記述領域なしと仮定して,表4-2の変換規則に従います。

クライアントのバージョンが08-05以降の場合
クライアントの文字コードがUCS-2で,サーバ側の文字コードがUTF-8の場合,文字集合名記述領域はUTF-16LEを仮定して,表4-2の変換規則に従います。
(b) OLE DB対応アプリケーションプログラム,又はType2 JDBCドライバを使用するJDBC対応アプリケーションプログラムからのアクセス

文字集合名記述領域なしと仮定して,表4-2の変換規則に従います。

(c) Type4 JDBCドライバを使用するJDBC対応アプリケーションプログラムからのアクセス

クライアントのバージョンが08-05より前,又はサーバ側の文字コードがUTF-8以外の場合
JDBCドライバが,Java仮想マシンによって提供されるエンコーダを利用してサーバ側の文字コードに変換します。サーバ側に文字集合の指定がある場合は,サーバ側で文字集合の文字コードに変換します。

クライアントのバージョンが08-05以降,かつサーバ側の文字コードがUTF-8の場合
サーバ側に文字集合UTF16の指定がある場合は,UTF-16BEでサーバとデータの受け渡しをします。サーバ側に文字集合UTF16の指定がない場合は,Java仮想マシンによって提供されるエンコーダを利用してUTF-8に変換します。