Cデータ型定義
typedef unsigned char CHARACTER; typedef Latin_Text CHARACTER_LATIN; typedef Kanjisjis_Text CHARACTER_KANJISJIS; typedef Kanji1_Text CHARACTER_KANJI1; typedef Unicode_Text CHARACTER_UNICODE;
使用方法
文字データ型は、Cの標準NULL終了文字列を使用して渡されます。そのため、C文字列はSQL文字列より1文字長くなります。
UDF入力パラメータ文字列の途中に2進ゼロの文字を使用するには、CHARデータ型を使用してください。途中に2進ゼロの文字を含む文字列をCコードで処理することは、固定長文字列のほうが簡単だからです。同じように、VARCHAR型結果文字列の途中に2進ゼロの文字があると文字列終了と解釈されてしまうため、UDF結果文字列の途中に2進ゼロの文字を使用するには、CHARデータ型を使用してください。
関数で固定長文字入力パラメータを定義している場合、入力文字列の文字数は、CREATE FUNCTION文で定義されている最大数と必ず一致します。この最大数より少ない文字数の文字列で関数を呼び出すと、入力文字列は関数に渡される前に右側が埋め込まれます。
埋め込みの必要な固定長文字データには、指定された文字セットの空白文字が埋め込みとして使用されます。
関数の結果型が固定長文字データの場合、結果引数はCREATE FUNCTION文で定義されている最大値に文字列終了NULL文字のための1を加算したサイズのデータ域へのポインタです。結果の文字列の文字数は、CREATE FUNCTION文で定義されている最大数と一致している必要があります。戻されるデータがこの最大数を下回る場合は、結果文字列に埋め込みを追加する必要があります。
文字セットがUNICODEなら、CHARACTER_UNICODEデータ型を使用します。文字セットがUNICODE以外の場合は、CHARACTERデータ型を使用できます。
次の例では、UDF定義でCHAR型、C関数宣言でCHARACTER_LATINを使用しています。
SQL関数定義 | 対応するC関数宣言 |
---|---|
CREATE FUNCTION F1 ( A CHAR(6) CHARACTER SET LATIN) RETURNS CHAR CHARACTER SET LATIN ...; |
void f1(CHARACTER_LATIN a[7], CHARACTER_LATIN *result, ... ) { ... } |
制限
Unicode文字列では、1文字について2バイトを使用します。文字列終了NULL文字も2バイトになります。Cライブラリのワイド文字(wchar_t)は4バイトなので、Unicode文字列の処理にCライブラリのワイド文字用ルーチンを使用することはできません。