Unicode-Daten
SQL Unicode-Datentypen werden bereitgestellt, um Daten zu beschreiben, die in Unicode nativ auf dem DBMS gespeichert sind. Ein C-Unicode-Datentyp wird bereitgestellt, um einer Anwendung das Binden von Daten an einen Unicode-Puffer zu ermöglichen. Der Treiber-Manager kann Daten aus einem Unicode-C-Typ (SQL_C_WCHAR) konvertieren, damit er mit einem ANSI-Treiber funktioniert.
ODBC 3.0 oder 2.x-Anwendung wird immer an die ANSI-Datentypen gebunden. Um eine optimale Leistung zu erzielen, sollte eine ODBC 3.5-Anwendung (oder höher) an den ANSI-Datentyp C gebunden werden, wenn der SQL-Spaltentyp ANSI ist, und eine Bindung an den Unicode-C-Datentyp ausführen, wenn der SQL-Spaltentyp Unicode ist.
Die SQL-Unicode-Typindikatoren sind SQL_WCHAR, SQL_WVARCHAR und SQL_WLONGVARCHAR. SQL_WCHAR Daten haben eine feste Zeichenfolgenlänge, während SQL_WVARCHAR eine variable Länge mit einem deklarierten Maximum aufweist und SQL_WLONGVARCHAR eine variable Länge mit einer maximalen Länge aufweist, die von der Datenquelle abhängt.
Die C Unicode-Typanzeige ist SQL_C_WCHAR. Dies ist die Standardeinstellung für jede der SQL-Unicode-Typindikatoren. Alle SQL-Typen können in SQL_C_WCHAR konvertiert werden, und SQL_C_WCHAR können in alle SQL-Typen konvertiert werden. Eine Anwendung kann Daten auf eine von drei Arten abrufen:
Rufen Sie die Daten als SQL_C_CHAR ab.
Rufen Sie die Daten als SQL_C_WCHAR ab.
Deklarieren Sie die Daten als SQL_C_TCHAR. Dies ist ein Makro, das SQL_C_WCHAR einfügt, wenn die Anwendung als Unicode-Anwendung kompiliert oder SQL_C_CHAR eingefügt wird, wenn sie als ANSI-Anwendung kompiliert wird.
SQL_C_TCHAR wird wie folgt in einer Funktion deklariert:
SQLBindParameter(StatementHandle, 1, SQL_PARAM_INPUT, SQL_C_TCHAR, SQL_WCHAR, NameLen, 0, Name, 0, &Name)
Wenn die Anwendung als Unicode-Anwendung kompiliert wird, würde das ValueType-Argument von SQL_C_TCHAR in SQL_C_WCHAR geändert. Wenn die Anwendung als ANSI-Anwendung kompiliert wird, wird das ValueType-Argument in SQL_C_CHAR geändert.
Unicode-Treiber müssen weiterhin ANSI-Datentypen unterstützen, einschließlich SQL_CHAR. Wenn eine Anwendung, die mit einem Unicode-Treiber arbeitet, an SQL_CHAR gebunden ist, zuordnen der Treiber-Manager die SQL_CHAR Daten nicht SQL_WCHAR. Der Unicode-Treiber muss die SQL_CHAR Daten akzeptieren.
Der Treiber-Manager speichert Treiber- und DSN-Namen in Unicode und ordnet sie nach Bedarf ANSI zu. Wenn ein Unicode-Zeichen einem ANSI-Zeichen nicht zugeordnet werden kann (wie möglich, wenn Zeichen von einer Codeseite, die nicht die systemeigene Codepage des Computers ist, in Treiber- und DSN-Namen verwendet werden), werden die Zeichen, die nicht konvertiert werden konnten, durch ein Standardzeichen dargestellt, das vom System bereitgestellt wird.