次の方法で共有


文字データの自動変換

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

参照

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