Share via


UTF-8-ondersteuning in OLE DB-stuurprogramma voor SQL Server

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database in Microsoft Fabric

OLE DB-stuurprogramma downloaden

Microsoft OLE DB-stuurprogramma voor SQL Server (versie 18.2.1) voegt ondersteuning toe voor de UTF-8-servercodering. Zie voor meer informatie over de ondersteuning voor SQL Server UTF-8:

Versie 18.4.0 van het stuurprogramma voegt ondersteuning toe voor de UTF-8-clientcodering (ingeschakeld met het selectievakje Unicode UTF-8 gebruiken voor wereldwijde taalondersteuning in Windows 10 en Windows 11).

Opmerking

Microsoft OLE DB-stuurprogramma voor SQL Server maakt gebruik van de Functie GetACP om de codering van de DBTYPE_STR invoerbuffer te bepalen.

Scenario's waarin GetACP een UTF-8-codering retourneert (ingeschakeld met het selectievakje Unicode UTF-8 voor wereldwijde taalondersteuning gebruiken) onder Regio-instellingen in Windows 10 en Windows 11) worden ondersteund vanaf versie 18.4. In eerdere versies, als de buffer Unicode-gegevens moet opslaan, moet het buffergegevenstype worden ingesteld op DBTYPE_WSTR (UTF-16 gecodeerd).

Gegevensinvoeging in een UTF-8 gecodeerde CHAR- of VARCHAR-kolom

Bij het maken van een invoerparameterbuffer voor invoeging wordt de buffer beschreven met behulp van een matrix van DBBINDING-structuren. Elke DBBINDING-structuur koppelt één parameter aan de buffer van de consument en bevat informatie zoals de lengte en het type van de gegevenswaarde. Voor een invoerparameterbuffer van het type CHAR moet het wType van de DBBINDING-structuur worden ingesteld op DBTYPE_STR. Voor een invoerparameterbuffer van het type WCHAR moet het wType van de DBBINDING-structuur worden ingesteld op DBTYPE_WSTR.

Bij het uitvoeren van een opdracht met parameters maakt het stuurprogramma informatie over het parametergegevenstype. Als het invoerbuffertype en het parametergegevenstype overeenkomen, wordt er geen conversie uitgevoerd in het stuurprogramma. Anders converteert het stuurprogramma de invoerparameterbuffer naar het gegevenstype parameter. Het parametergegevenstype kan expliciet door de gebruiker worden ingesteld door ICommandWithParameters::SetParameterInfo aan te roepen. Als de gegevens niet worden opgegeven, leidt het stuurprogramma de gegevens van het parametergegevenstype af door (a) metagegevens van de kolom op te halen van de server wanneer de instructie is voorbereid of (b) een standaardconversie uit te voeren van het gegevenstype invoerparameter.

De invoerparameterbuffer kan worden geconverteerd naar de sortering van de serverkolom door het stuurprogramma of door de server, afhankelijk van het gegevenstype invoerbuffer en het parametergegevenstype. Tijdens de conversie kan gegevensverlies optreden als de clientcodepagina of de databasesorteringscodepagina niet alle tekens in de invoerbuffer kan vertegenwoordigen. In de volgende tabel wordt het conversieproces beschreven bij het invoegen van gegevens in een kolom waarvoor UTF-8 is ingeschakeld:

Buffergegevenstype Parametergegevenstype Conversion Voorzorgsmaatregelen van de gebruiker
DBTYPE_STR DBTYPE_STR Serverconversie van clientcodepagina naar databasecollatiecodepagina; serverconversie van databasecollatiecodepagina naar kolomcollatiecodepagina. Zorg ervoor dat de clientcodepagina en de databasesorteringscodepagina alle tekens in de invoergegevens kunnen weergeven. Als u bijvoorbeeld een Pools teken wilt invoegen, kan de client-codepagina worden ingesteld op 1250 (ANSI - Centraal-Europees) en kan de databasesortering Pools gebruiken als collatie-ontwerper (bijvoorbeeld Polish_100_CI_AS_SC) of kan UTF-8 worden ingeschakeld.
DBTYPE_STR DBTYPE_WSTR Conversie van stuurprogramma van clientcodepagina naar UTF-16-codering; serverconversie van UTF-16-codering naar pagina met kolomsorteringscode. Zorg ervoor dat de clientcodepagina alle tekens in de invoergegevens kan vertegenwoordigen. Als u bijvoorbeeld een Pools teken wilt invoegen, kan de clientcodepagina worden ingesteld op 1250 (ANSI - Centraal-Europees).
DBTYPE_WSTR DBTYPE_STR Conversie van UTF-16-codering naar databasesorteringscode-pagina voor het stuurprogramma; conversie op de server van databasesorteringscode-pagina naar kolomsorteringscode-pagina. Zorg ervoor dat de databasesorteringscodepagina alle tekens in de invoergegevens kan weergeven. Als u bijvoorbeeld een Pools teken wilt invoegen, kan de databasesorteringscodepagina Pools gebruiken als de sorteringsontwerper (bijvoorbeeld Polish_100_CI_AS_SC) of kan UTF-8 worden ingeschakeld.
DBTYPE_WSTR DBTYPE_WSTR Serverconversie van UTF-16 naar pagina met kolomsorteringscode. Geen.

Gegevens ophalen uit een UTF-8 gecodeerde CHAR- of VARCHAR-kolom

Bij het maken van een buffer voor opgehaalde gegevens wordt de buffer beschreven met behulp van een matrix van DBBINDING-structuren. Elke DBBINDING-structuur koppelt één kolom in de opgehaalde rij. Als u de kolomgegevens wilt ophalen als CHAR, stelt u het wType van de DBBINDING-structuur in op DBTYPE_STR. Als u de kolomgegevens wilt ophalen als WCHAR, stelt u het wType van de DBBINDING-structuur in op DBTYPE_WSTR.

Voor de indicator van het resultaatbuffertype DBTYPE_STR converteert het stuurprogramma de gecodeerde UTF-8-gegevens naar de clientcodering. De gebruiker moet ervoor zorgen dat de clientcodering de gegevens uit de UTF-8-kolom kan vertegenwoordigen, anders kunnen gegevensverlies optreden.

Voor de indicator van het resultaatbuffertype DBTYPE_WSTR converteert het stuurprogramma de gecodeerde UTF-8-gegevens naar de UTF-16-codering.

Communicatie met servers die UTF-8 niet ondersteunen

Microsoft OLE DB-stuurprogramma voor SQL Server zorgt ervoor dat gegevens worden blootgesteld aan de server op een manier die de server kan begrijpen. Bij het invoegen van gegevens van clients met UTF-8, vertaalt het stuurprogramma UTF-8 gecodeerde tekenreeksen naar de pagina met databasesorteringscode voordat het naar de server wordt verzonden.

Opmerking

Het gebruik van de ISequentialStream-interface voor het invoegen van met UTF-8 gecodeerde gegevens in een verouderde tekstkolom is alleen beperkt tot servers die UTF-8 ondersteunen. Zie BLOBs en OLE-objecten voor meer informatie.

Zie ook

OLE DB-driver voor SQL Server-functies
UTF-16-ondersteuning in OLE DB-stuurprogramma voor SQL Server