Automatische Übersetzung der Zeichendaten

Zeichendaten, wie beispielsweise mit SQL_C_CHAR deklarierte ANSI-Zeichenvariablen oder in SQL Server mit den Datentypen char, varchar oder text gespeicherte Daten, können lediglich eine begrenzte Zahl von Zeichen darstellen. Mit einem Byte pro Zeichen gespeicherte Zeichendaten können nur 256 Zeichen darstellen. Die in SQL_C_CHAR-Variablen gespeicherten Werte werden mithilfe der ANSI-Codepage (ACP) auf dem Clientcomputer interpretiert. Auf dem Server mit den Datentypen char, varchar oder text gespeicherte Werte werden mithilfe der ACP auf dem Server ausgewertet.

Wenn sowohl der Server als auch der Client über die gleiche ACP verfügen, gibt es keine Probleme bei der Auswertung der in SQL_C_CHAR, char-Objekten, varchar-Objekten oder text-Objekten gespeicherten Werte. Wenn der Server und der Client über unterschiedliche ACP verfügen, werden SQL_C_CHAR-Daten des Clients möglicherweise auf dem Server als anderes Zeichen interpretiert, wenn sie in Spalten, Variablen oder Parametern der Datentypen char, varchar oder text verwendet werden. Ein Zeichenbyte mit dem Wert 0xA5 wird beispielsweise auf einem Computer, der die Codepage 437 verwendet, als das Zeichen Ñ interpretiert, und auf einem Computer, auf dem die Codepage 1252 ausgeführt wird, als Yen-Zeichen (¥).

Unicode-Daten werden mit zwei Bytes pro Zeichen gespeichert. Alle erweiterten Zeichen werden von der Unicode-Spezifikation abgedeckt, weshalb alle Unicode-Zeichen von allen Computern einheitlich interpretiert werden.

Die Funktion AutoTranslate des SQL Server Native Client ODBC-Treibers minimiert die Probleme, die beim Verschieben von Daten zwischen einem Client und einem Server, die unterschiedliche Codepages verwenden, auftreten können. AutoTranslate kann in der Verbindungszeichenfolge von SQLDriverConnect, in der Konfigurationszeichenfolge von SQLConfigDataSource oder bei der Konfiguration von Datenquellen für den SQL Server Native Client ODBC-Treiber mit dem ODBC-Administrator festgelegt werden.

Wenn AutoTranslate auf No festgelegt ist, werden keine Konvertierungen von Daten vorgenommen, die zwischen SQL_C_CHAR-Variablen auf dem Client und Spalten, Variablen oder Parametern der Datentypen char, varchar oder text in einer SQL Server-Datenbank verschoben werden. Die Bitmuster werden auf dem Client- und dem Servercomputer möglicherweise unterschiedlich interpretiert, wenn die Daten erweiterte Zeichen enthalten und die beiden Computer unterschiedliche Codepages verwenden. Die Daten werden einheitlich interpretiert, wenn beide Computer die gleiche Codepage verwenden.

Wenn AutoTranslate auf Yes festgelegt ist, verwendet der SQL Server Native Client ODBC-Treiber Unicode zur Konvertierung von Daten, die zwischen SQL_C_CHAR-Variablen auf dem Client und Spalten, Variablen oder Parametern der Datentypen char, varchar oder text in einer SQL Server-Datenbank verschoben werden:

  • Wenn Daten von einer SQL_C_CHAR-Variablen auf dem Client an eine Spalte, Variable oder einen Parameter des Datentyps char, varchar oder text in einer SQL Server-Datenbank verschoben werden, konvertiert der ODBC-Treiber erst mithilfe der ACP auf dem Client von SQL_C_CHAR in Unicode und dann mithilfe der ACP auf dem Server von Unicode zurück in Zeichen.

  • Wenn Daten von einer Spalte, Variable oder einem Parameter des Datentyps char, varchar oder text in einer SQL Server-Datenbank an eine SQL_C_CHAR-Variable auf dem Client gesendet werden, konvertiert der SQL Server Native Client ODBC-Treiber erst mithilfe der ACP auf dem Server vom Zeichen in Unicode und dann mithilfe der ACP auf dem Client von Unicode zurück in SQL_C_CHAR.

Da alle diese Konvertierungen vom SQL Server Native Client ODBC-Treiber vorgenommen werden, der auf dem Client ausgeführt wird, muss die Server-ACP eine der auf dem Clientcomputer installierten Codepages sein.

Indem die Zeichenkonvertierung über Unicode durchgeführt wird, ist sichergestellt, dass alle Zeichen, die auf beiden Codepages enthalten sind, korrekt konvertiert werden. Wenn ein Zeichen jedoch nur auf einer der beiden Codepages aufgeführt ist, kann es auf der Zielcodepage nicht dargestellt werden. Zum Beispiel umfasst die Codepage 1252 das Symbol für eingetragene Marken (®), während das Symbol auf der Codepage 437 nicht enthalten ist.

Die AutoTranslate-Einstellung wirkt sich auf die folgenden Konvertierungen nicht aus:

  • Verschieben von Daten zwischen SQL_C_CHAR-Clientvariablen im Zeichenformat und Spalten, Variablen oder Parametern der Datentypen nchar, nvarchar oder ntext in SQL Server-Datenbanken im Unicode-Format

  • Verschieben von Daten zwischen SQL_C_WCHAR-Clientvariablen im Unicode-Format und Spalten, Variablen oder Parametern der Datentypen char, varchar oder text in SQL Server-Datenbanken im Zeichenformat

Daten müssen immer konvertiert werden, wenn sie vom Zeichenformat in Unicode übertragen werden.