多くのODBCインターフェース関数では、文字列入出力値の長さを指定する文字列引数が必要です。一部の関数では、これらの長さ(バイト単位)を指定するためのUnicode引数が必要ですが、別の関数では、文字数として指定される長さが必要です。これは、プラットフォームとUnicodeエンコーディングで変わります。
- UTF16/UTF32でエンコードされたUnicode文字列: Microsoft ODBC 3.0 Programmer's Referenceの「Programming Considerations」にあるUnicodeセクションから引用した下記の文章では、Unicode関数の長さ引数の仕様に関する厳格な規則が規定されています。
「Unicode関数が常に文字列を受け取るか返す場合、長さ引数には文字数が渡されます。サーバー データの長さを返す関数の場合、表示サイズおよび精度は、文字数で記述されます。長さ(データの転送サイズ)を文字列データとしても非文字列データとしても参照する場合、長さはオクテット長で記述されます。例えば、SQLGetInfoWは長さをバイト数で受け取りますが、SQLExecDirectWでは文字数が使用されます。」
- UNIXシステムでのUTF8エンコードのUnicode文字列:UTF8は、UNIXシステムで動作するODBCアプリケーションのデフォルトUnicodeエンコーディングです。ODBCインターフェース関数へのすべての文字列長引数は、バイト数として指定する必要があります。