UNIXシステムの場合、UTF8エンコードUnicode文字列用の固有のC/C++型はありません。UTF8エンコード文字列を表わす場合、通常はchar型の文字列を使用しますが、文字列を扱う関数を使用する場合には、特にバイト数と文字数で表わされる文字列の長さについて、注意が必要です。
ほとんどのUNIXシステムの実装にはwchar_t型がありますが、この型は通常、UTF8ではなく、UTF32のような固定長文字のエンコーディングに使用される32ビットのデータ型です。このようなシステムの場合の別のアプローチとしては、アプリケーション内部ではwchar_tを使用し、ODBC Driver for Teradataのような外部インターフェースに文字列を渡す場合にUTF8に変換して戻します。
可能な場合は常に、SQLWCHAR ODBC文字型は、wchar_t型ではなく、Unicode文字列に対して使用する必要があります。これはSQLWCHARとwchar_tは、すべてのOSで同じとは限らないからです。
UNIXシステムの場合、文字列のUnicodeエンコーディングとODBC Driver for Teradataに渡されるデータは、次のとおりデフォルトのUTF8からUTF16に変更できます。
- SQLWCHARSHORTを定義します。例えば、ユーザーのコードに次を追加します。
#define SQLWCHARSHORT
SQLCHARSHORTは、SQL_WCHARの定義をchar*からshort *に変更します。これは、ODBCインクルード ファイルが指定される前に定義されていなければなりません。 - SQL_ATTR_APP_UNICODE_TYPE環境属性をSQL_DD_CP_UTF16に設定します。例えば、ユーザーのコードに次を追加します。
// Specify the unicode encoding for the application. SQL calls and // data are both affected. No other environment variables or // connection options (including DSN options) are needed. rc = SQLSetEnvAttr (m_henv, SQL_ATTR_APP_UNICODE_TYPE, (void *) SQL_DD_CP_UTF16, SQL_IS_INTEGER);