文字データの自動変換
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
SQL_C_CHARで宣言された ANSI 文字変数や、 char、 varchar、または text データ型を使用して SQL Server に格納されたデータなどの文字データは、限られた数の文字のみを表すことができます。 1 文字ごとに 1 バイトを使用して保存される文字データでは、256 文字しか表現できません。 SQL_C_CHAR 変数に格納される値は、クライアント コンピューターの ANSI コード ページ (ACP) を使用して解釈されます。 サーバー上の char、 varchar、または text データ型を使用して格納された値は、サーバーの ACP を使用して評価されます。
サーバーとクライアントの両方に同じ ACP がある場合、SQL_C_CHAR、 char、、 varchar、または text オブジェクトに格納されている値の解釈に問題はありません。 サーバーとクライアントの ACL が異なる場合、クライアントからSQL_C_CHARデータは、 char、 varchar、または 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 データベースの char、 varchar、または text 列、変数、またはパラメーターの間で移動されたデータに対して変換は行われません。 この場合、データに拡張文字が含まれていて、クライアント コンピューターとサーバー コンピューターのコード ページが異なっていると、ビット パターンはクライアントとサーバーでは異なって解釈される可能性があります。 クライアントとサーバーが同じコード ページを使用している場合は、データは同じ文字に解釈されます。
AutoTranslate が "yes" に設定されている場合、SQL Server Native Client ODBC ドライバーは Unicode を使用して、クライアント上のSQL_C_CHAR変数と、SQL Server データベース内の char、 varchar、または text 列、変数、またはパラメーターの間で移動されたデータを変換します。
SQL Server データベースでクライアントのSQL_C_CHAR変数から char、 varchar、または text 列、変数、またはパラメーターにデータが送信されると、ODBC ドライバーは、クライアントの ACP を使用して SQL_C_CHAR から Unicode に変換してから、Unicode からサーバーの ACP を使用して文字に変換します。
SQL Server データベースの char、 varchar、または 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 nchar、 nvarchar、または ntext 列、変数、またはパラメーターの間でデータを移動する。
Unicode SQL_C_WCHAR クライアント変数と文字 char、 varchar、または sql Server データベースの テキスト 列、変数、またはパラメーターの間でデータを移動する。
文字から Unicode にデータが移動される場合、データは必ず変換されます。