UTF-8-Unterstützung im OLE DB-Treiber für SQL Server
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Microsoft OLE DB-Treiber für SQL Server (Version 18.2.1) bietet Unterstützung für die UTF-8-Servercodierung. Informationen zur UTF-8-Unterstützung von SQL Server finden Sie unter:
Mit der Treiberversion 18.4.0 wird Unterstützung für die UTF-8-Clientcodierung eingeführt (in Windows 10 und Windows 11 unter „Regionseinstellungen“ über das Kontrollkästchen „Unicode UTF-8 für weltweite Sprachunterstützung verwenden“ aktiviert).
Hinweis
Der Microsoft OLE DB-Treiber für SQL Server verwendet die Funktion GetACP, um die Codierung des Eingabepuffers „DBTYPE_STR“ zu bestimmen.
Szenarios, in denen GetACP eine UTF-8-Codierung zurückgibt (in Windows 10 und Windows 11 unter „Regionseinstellungen“ über das Kontrollkästchen „Unicode UTF-8 für weltweite Sprachunterstützung verwenden“ aktiviert), werden ab Version 18.4 unterstützt. In früheren Versionen musste der Datentyp des Puffers auf DBTYPE_WSTR (UTF-16-codiert) festgelegt werden, wenn der Puffer Unicode-Daten speichern musste.
Einfügen von Daten in eine UTF-8-codierte CHAR- oder VARCHAR-Spalte
Wenn Sie einen Eingabeparameterpuffer für das Einfügen erstellen, wird der Puffer mithilfe eines Arrays von DBBINDING-Strukturen beschrieben. Jede DBBINDING-Struktur ordnet dem Puffer des Consumers einen einzelnen Parameter zu und enthält Informationen wie z. B. Länge und Typ des Datenwerts. Für einen Eingabeparameterpuffer des Typs CHAR sollte der wType der DBBINDING-Struktur auf DBTYPE_STR festgelegt werden. Für einen Eingabeparameterpuffer des Typs WCHAR sollte der wType der DBBINDING-Struktur auf DBTYPE_WSTR festgelegt werden.
Beim Ausführen eines Befehls mit Parametern erstellt der Treiber Parameterdatentyp-Informationen. Wenn der Eingabepuffertyp und der Parameterdatentyp übereinstimmen, erfolgt keine Konvertierung im Treiber. Andernfalls konvertiert der Treiber den Eingabeparameterpuffer in den Parameterdatentyp. Der Parameterdatentyp kann vom Benutzer durch Aufrufen von ICommandWithParameters::SetParameterInfo explizit festgelegt werden. Wenn die Informationen nicht angegeben werden, leitet der Treiber die Parameterdatentyp-Informationen ab, indem er (a) Spaltenmetadaten vom Server abruft, wenn die Anweisung vorbereitet wird, oder (b) versucht, eine Standardkonvertierung des Datentyps des Eingabeparameters auszuführen.
Der Eingabeparameterpuffer kann je nach Datentyp des Eingabepuffers und des Parameters vom Treiber oder vom Server in die Serverspaltensortierung konvertiert werden. Bei der Konvertierung können Daten verloren gehen, wenn die Clientcodepage oder die Datenbanksortierungs-Codepage nicht alle Zeichen im Eingabepuffer darstellen kann. In der folgenden Tabelle wird der Konvertierungsprozess beim Einfügen von Daten in eine UTF-8-codierte Spalte beschrieben:
Pufferdatentyp | Parameterdatentyp | Konvertierung | Vorkehrung |
---|---|---|---|
DBTYPE_STR | DBTYPE_STR | Serverkonvertierung von Clientcodepage in Datenbanksortierungs-Codepage; Serverkonvertierung von Datenbanksortierungs-Codepage in Spaltensortierungs-Codepage. | Stellen Sie sicher, dass alle Zeichen in den Eingabedaten von der Clientcodepage und von der Datenbanksortierungs-Codepage dargestellt werden können. Um beispielsweise ein polnisches Zeichen einzufügen, könnte die Clientcodepage auf 1250 (ANSI Mitteleuropäisch) festgelegt werden, und für die Datenbanksortierung könnte Polnisch als Sortierungskennzeichner verwendet werden (z. B. Polish_100_CI_AS_SC) oder die UTF-8-Codierung aktiviert sein. |
DBTYPE_STR | DBTYPE_WSTR | Treiberkonvertierung von Clientcodepage in UTF-16-Codierung; Serverkonvertierung von UTF-16-Codierung in Spaltensortierungs-Codepage. | Stellen Sie sicher, dass die Clientcodepage alle Zeichen in den Eingabedaten darstellen kann. Um beispielsweise ein polnisches Zeichen einzufügen, könnte die Clientcodepage auf 1250 (ANSI Mitteleuropäisch) festgelegt werden. |
DBTYPE_WSTR | DBTYPE_STR | Treiberkonvertierung von UTF-16-Codierung in Datenbanksortierungs-Codepage; Serverkonvertierung von Datenbanksortierungs-Codepage in Spaltensortierungs-Codepage. | Stellen Sie sicher, dass die Datenbanksortierungs-Codepage alle Zeichen in den Eingabedaten darstellen kann. Um beispielsweise ein polnisches Zeichen einzufügen, könnte für die Datenbanksortierungs-Codepage Polnisch als Sortierungskennzeichner verwendet werden (z. B. Polish_100_CI_AS_SC) oder die UTF-8-Codierung aktiviert sein. |
DBTYPE_WSTR | DBTYPE_WSTR | Serverkonvertierung von UTF-16-Codierung in Spaltensortierungs-Codepage. | Keine. |
Abrufen von Daten aus einer UTF-8-codierten CHAR- oder VARCHAR-Spalte
Wenn Sie einen Puffer für abgerufene Daten erstellen, wird der Puffer mithilfe eines Arrays von DBBINDING-Strukturen beschrieben. Jede DBBINDING-Struktur ordnet eine einzelne Spalte in der abgerufenen Zeile zu. Um die Spaltendaten als CHAR abzurufen, legen Sie den wType der DBBINDING-Struktur auf DBTYPE_STR fest. Um die Spaltendaten als WCHAR abzurufen, legen Sie den wType der DBBINDING-Struktur auf DBTYPE_WSTR fest.
Für den Puffertypindikator DBTYPE_STR konvertiert der Treiber die UTF-8-codierten Daten in die Clientcodierung. Der Benutzer sollte sicherstellen, dass die Clientcodierung die Daten aus der UTF-8-codierten Spalte darstellen kann. Andernfalls können Daten verloren gehen.
Für den Puffertypindikator DBTYPE_WSTR konvertiert der Treiber die UTF-8-codierten Daten in die UTF-16-Codierung.
Kommunikation mit Servern ohne Unterstützung für UTF-8
Der Microsoft OLE DB-Treiber für SQL Server stellt sicher, dass Daten so für den Server verfügbar gemacht werden, die der Server diese verstehen kann. Beim Einfügen von Daten aus UTF-8-fähigen Clients übersetzt der Treiber UTF-8-codierte Zeichenfolgen in die Codepage der Datenbanksortierung, bevor diese an den Server gesendet werden.
Hinweis
Die Schnittstelle ISequentialStream zum Einfügen von UTF-8-codierten Daten in eine Legacytextspalte kann nur auf Servern eingesetzt werden, die UTF-8 unterstützen. Weitere Informationen finden Sie unter Blobs und OLE-Objekte.
Weitere Informationen
OLE DB-Treiber für SQL Server-Features
UTF-16-Unterstützung im OLE DB-Treiber für SQL Server (OLE DB)