次の方法で共有


文字データの自動変換

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

SQL_C_CHARで宣言された ANSI 文字変数や、charvarchar、またはテキスト データ型を使用してSQL Serverに格納されたデータなどの文字データは、限られた数の文字のみを表すことができます。 1 文字ごとに 1 バイトを使用して保存される文字データでは、256 文字しか表現できません。 SQL_C_CHAR 変数に格納される値は、クライアント コンピューターの ANSI コード ページ (ACP) を使用して解釈されます。 サーバー上の charvarchar、または text データ型を使用して格納された値は、サーバーの ACP を使用して評価されます。

サーバーとクライアントの両方に同じ ACP がある場合、SQL_C_CHAR、 charvarchar、または テキスト オブジェクトに格納されている値を解釈しても問題はありません。 サーバーとクライアントの ACL が異なる場合、クライアントからのSQL_C_CHARデータは、 charvarchar、または テキスト 列、変数、またはパラメーターで使用されている場合、サーバー上で別の文字として解釈される可能性があります。 たとえば、0xA5 という値の文字バイトは、コード ページ 437 を使用するコンピューターでは Ñ という文字に解釈されますが、コード ページ 1252 を使用するコンピューターでは円記号 (\) として解釈されます。

Unicode データは、1 文字あたり 2 バイトを使用して格納されます。 Unicode の仕様は、すべての拡張文字を網羅しています。したがって、すべての Unicode 文字は、すべてのコンピューターで同じ文字に解釈されます。

SQL Server Native Client ODBC ドライバーの AutoTranslate 機能は、クライアントと異なるコード ページを持つサーバー間で文字データを移動する際の問題を最小限に抑えようとします。 AutoTranslate は、SQLDriverConnect の接続文字列、SQLConfigDataSource の構成文字列、または ODBC 管理者を使用してSQL Server Native Client ODBC ドライバーのデータ ソースを構成するときに設定できます。

AutoTranslate が "no" に設定されている場合、クライアント上のSQL_C_CHAR変数と、SQL Server データベース内の charvarchar、またはテキスト列、変数、またはパラメーターの間で移動されたデータに対して変換は行われません。 この場合、データに拡張文字が含まれていて、クライアント コンピューターとサーバー コンピューターのコード ページが異なっていると、ビット パターンはクライアントとサーバーでは異なって解釈される可能性があります。 クライアントとサーバーが同じコード ページを使用している場合は、データは同じ文字に解釈されます。

AutoTranslate が "yes" に設定されている場合、SQL Server Native Client ODBC ドライバーは Unicode を使用して、クライアント上のSQL_C_CHAR変数と、SQL Server データベース内の charvarchar、またはテキスト列、変数、またはパラメーターの間で移動されたデータを変換します。

  • データがクライアントのSQL_C_CHAR変数から、SQL Server データベースの charvarchar、または text 列、変数、またはパラメーターに送信されると、ODBC ドライバーは最初にクライアントの ACP を使用して SQL_C_CHAR から Unicode に変換し、Unicode からサーバーの ACP を使用して文字に変換します。

  • データが、SQL Server データベースの charvarchar、またはテキスト列、変数、またはパラメーターからクライアント上のSQL_C_CHAR変数に送信されると、SQL Server Native Client ODBC ドライバーはまず、サーバーの ACP を使用して文字から Unicode に変換し、次に Unicode からクライアントの ACP を使用してSQL_C_CHARに変換します。

これらの変換はすべて、クライアントで実行されている odbc ドライバー SQL Server Native Clientによって行われるため、サーバー ACP はクライアント コンピューターにインストールされているコード ページのいずれかである必要があります。

Unicode を使用して文字を変換することで、両方のコード ページに存在しているすべての文字を適切に変換できます。 ただし、一方のコード ページにあっても、他方のコード ページにない文字の場合は、変換先のコード ページでは表現できません。 たとえば、コード ページ 1252 には登録商標記号 (®) がありますが、コード ページ 437 にはこの記号がありません。

AutoTranslate の設定は、次の変換には影響しません。

  • 文字SQL_C_CHARクライアント変数と、SQL Server データベース内の Unicode ncharnvarchar、または ntext 列、変数、またはパラメーターの間でデータを移動します。

  • Unicode SQL_C_WCHARクライアント変数と、SQL Server データベース内の文字 charvarchar、またはテキスト列、変数、またはパラメーターの間でデータを移動する。

文字から Unicode にデータが移動される場合、データは必ず変換されます。

参照

結果の処理 (ODBC)
照合順序と Unicode のサポート