ドライバーが Unicode ドライバーであるか ANSI ドライバーであるかは、データ ソースの性質に完全に依存します。 データ ソースが Unicode データをサポートしている場合、ドライバーは Unicode ドライバーである必要があります。 データ ソースが ANSI データのみをサポートしている場合、ドライバーは ANSI ドライバーのままである必要があります。
Unicode ドライバーは、ドライバー マネージャーによって Unicode ドライバーとして認識されるように SQLConnectW をエクスポートする必要があります。
Unicode ドライバーは、Unicode 関数 ( W のサフィックスを持つ) を受け入れ、Unicode データを格納する必要があります。 また、ANSI 関数を受け入れることもできますが、必須ではありません。 (ドライバー マネージャーは 、A サフィックスを持つ ANSI 関数呼び出しをドライバーに渡しませんが、サフィックスなしで ANSI 関数呼び出しに変換し、ドライバーに渡します)。
Unicode ドライバーは、アプリケーションのバインドに応じて、Unicode または ANSI で結果セットを返すことができる必要があります。 アプリケーションがSQL_C_CHARにバインドする場合、Unicode ドライバーはSQL_WCHARデータをSQL_CHARに変換する必要があります。 ドライバー マネージャーは、SQL_C_WCHARを ANSI ドライバーのSQL_C_CHARにマップしますが、Unicode ドライバーのマッピングは行いません。
注
ドライバーの種類を決定するときに、ドライバー マネージャーは SQLSetConnectAttr を 呼び出し、接続時にSQL_ATTR_ANSI_APP属性を設定します。 アプリケーションが ANSI API を使用している場合、SQL_ATTR_ANSI_APPはSQL_AA_TRUEに設定され、Unicode を使用している場合は、SQL_AA_FALSEの値に設定されます。 この属性は、ドライバーがアプリケーションの種類に基づいて異なる動作を示すことができるように使用されます。 この属性はアプリケーションで直接設定することはできません。 また、SQLGetConnectAttr ではサポートされていません。 ドライバーが ANSI アプリケーションと Unicode アプリケーションの両方で同じ動作を示す場合は、この属性のSQL_ERRORを返す必要があります。 ドライバーがSQL_SUCCESSを返す場合、接続プールを使用すると、ドライバー マネージャーは ANSI 接続と Unicode 接続を分離します。