UTF-8-stöd i OLE DB-drivrutin för SQL Server

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-databas i Microsoft Fabric

Ladda ned OLE DB-drivrutins

Microsoft OLE DB-drivrutinen för SQL Server (version 18.2.1) lägger till stöd för UTF-8-serverkodningen. Information om stöd för SQL Server UTF-8 finns i:

Version 18.4.0 av drivrutinen lägger till stöd för UTF-8-klientkodningen (aktiverad med kryssrutan "Använd Unicode UTF-8 för stöd för globalt språk" under Regioninställningar i Windows 10 och Windows 11).

Anmärkning

Microsoft OLE DB-drivrutinen för SQL Server använder funktionen GetACP för att fastställa kodningen av DBTYPE_STR indatabuffert.

Scenarier där GetACP returnerar en UTF-8-kodning (aktiverad med kryssrutan "Använd Unicode UTF-8 för globalt språkstöd" under Regioninställningar i Windows 10 och Windows 11) stöds från och med version 18.4. Om bufferten behöver lagra Unicode-data i tidigare versioner ska buffertdatatypen anges till DBTYPE_WSTR (UTF-16-kodad).

Datainfogning i en UTF-8-kodad CHAR- eller VARCHAR-kolumn

När du skapar en indataparameterbuffert för infogning beskrivs bufferten med hjälp av en matris med DBBINDING-strukturer. Varje DBBINDING-struktur associerar en enskild parameter med konsumentens buffert och innehåller information som datavärdets längd och typ. För en indataparameterbuffert av typen CHAR ska wType för DBBINDING-strukturen anges till DBTYPE_STR. För en indataparameterbuffert av typen WCHAR ska wType för DBBINDING-strukturen anges till DBTYPE_WSTR.

När du kör ett kommando med parametrar skapar drivrutinen information om parameterdatatyp. Om indatabufferttypen och parameterdatatypen matchar görs ingen konvertering i drivrutinen. Annars omvandlar drivrutinen bufferten för indataparametrar till parameterdatatypen. Parameterdatatypen kan anges explicit av användaren genom att anropa ICommandWithParameters::SetParameterInfo. Om informationen inte anges härleder drivrutinen informationen om parameterdatatypen genom att (a) hämta kolumnmetadata från servern när -instruktionen förbereds, eller (b) försöker utföra en standardkonvertering från datatypen för indataparametern.

Indataparameterbufferten kan konverteras till serverkolumnsortering av drivrutinen eller av servern, beroende på datatypen för indatabufferten och parameterns datatyp. Under konverteringen kan dataförlust inträffa om klientkodsidan eller kodsidan för databassortering inte kan representera alla tecken i indatabufferten. I följande tabell beskrivs konverteringsprocessen när data infogas i en UTF-8-aktiverad kolumn:

Buffertdatatyp Parameterdatatyp Conversion Försiktighetsåtgärder för användare
DBTYPE_STR DBTYPE_STR Serverkonvertering från klientkodsida till kodsida för databassortering. serverkonvertering från kodsidan för databassortering till kolumnsorteringskodsidan. Kontrollera att klientkodsidan och kodsidan för databassortering kan representera alla tecken i indata. Om du till exempel vill infoga ett polskt tecken kan klientkodsidan anges till 1250 (ANSI Central European) och databassortering kan använda polska som sorteringsdesignator (till exempel Polish_100_CI_AS_SC) eller vara UTF-8 aktiverat.
DBTYPE_STR DBTYPE_WSTR Drivrutinskonvertering från klientkodsidan till UTF-16-kodning; serverkonvertering från UTF-16-kodning till kolumnsorteringskodsida. Kontrollera att klientkodsidan kan representera alla tecken i indata. Om du till exempel vill infoga ett polskt tecken kan klientkodsidan anges till 1250 (ANSI Central European).
DBTYPE_WSTR DBTYPE_STR Drivrutinskonvertering från UTF-16-kodning till kodsidan för databassortering; serverkonvertering från kodsidan för databassortering till kolumnsorteringskodsidan. Se till att sidan för databassorteringskod kan representera alla tecken i indata. Om du till exempel vill infoga ett polskt tecken kan sidan för databassorteringskod använda polska som sorteringsdesignator (till exempel Polish_100_CI_AS_SC) eller vara UTF-8 aktiverad.
DBTYPE_WSTR DBTYPE_WSTR Serverkonvertering från UTF-16 till kolumnsorteringskodsidan. Ingen.

Datahämtning från en UTF-8-kodad CHAR- eller VARCHAR-kolumn

När du skapar en buffert för hämtade data beskrivs bufferten med hjälp av en matris med DBBINDING-strukturer. Varje DBBINDING-struktur associerar en enda kolumn på den hämtade raden. Om du vill hämta kolumndata som CHAR anger du wType för DBBINDING-strukturen till DBTYPE_STR. Om du vill hämta kolumndata som WCHAR anger du wType för DBBINDING-strukturen till DBTYPE_WSTR.

För indikatorn för resultatbufferttyp DBTYPE_STR konverterar drivrutinen UTF-8-kodade data till klientkodningen. Användaren bör se till att klientkodningen kan representera data från UTF-8-kolumnen, annars kan dataförlust uppstå.

För indikatorn för resultatbufferttyp DBTYPE_WSTR konverterar drivrutinen UTF-8-kodade data till UTF-16-kodningen.

Kommunikation med servrar som inte stöder UTF-8

Microsoft OLE DB-drivrutinen för SQL Server säkerställer att data exponeras för servern på ett sätt som servern kan förstå. När du infogar data från UTF-8-aktiverade klienter översätter drivrutinen UTF-8-kodade strängar till sidan för databassorteringskod innan den skickas till servern.

Anmärkning

Användning av ISequentialStream-gränssnittet för att infoga UTF-8-kodade data i en äldre textkolumn är endast begränsat till servrar som stöder UTF-8. Mer information finns i BLOB och OLE-objekt.

Se även

OLE DB-drivrutin för SQL Server-funktioner
UTF-16-stöd i OLE DB-drivrutin för SQL Server