Sdílet prostřednictvím


Podpora UTF-8 v ovladači OLE DB pro SQL Server

Platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformový systém (PDW)SQL databáze v Microsoft Fabric

Stáhnout ovladač OLE DB

Ovladač Microsoft OLE DB pro SQL Server (verze 18.2.1) přidává podporu pro kódování serveru UTF-8. Informace o podpoře UTF-8 systému SQL Server naleznete v tématu:

Verze 18.4.0 ovladače přidává podporu pro kódování klienta UTF-8 (povoleno pomocí zaškrtávacího políčka Použít kódování Unicode UTF-8 pro celosvětovou podporu jazyků" v části Nastavení oblasti ve Windows 10 a Windows 11).

Poznámka:

Ovladač Microsoft OLE DB pro SQL Server používá funkci GetACP k určení kódování vstupní vyrovnávací paměti DBTYPE_STR.

Scénáře, ve kterých GetACP vrací kódování UTF-8 (povoleno pomocí zaškrtávacího políčka Použít kódování Unicode UTF-8 pro celosvětovou podporu jazyků) v části Nastavení oblastí ve Windows 10 a Windows 11, se podporují od verze 18.4. V předchozích verzích, pokud vyrovnávací paměť potřebuje ukládat data Unicode, by měl být datový typ vyrovnávací paměti nastaven na DBTYPE_WSTR (kódování UTF-16).

Vložení dat do sloupce CHAR nebo VARCHAR s kódováním UTF-8

Při vytváření bufferu vstupního parametru pro vložení je tento buffer popsán pomocí pole struktur DBBINDING. Každá struktura DBBINDING přidruží k vyrovnávací paměti příjemce jeden parametr a obsahuje informace, jako je délka a typ datové hodnoty. Pro vyrovnávací paměť vstupního parametru typu CHAR by měla být wType struktury DBBINDING nastavena na DBTYPE_STR. Pro vyrovnávací paměť vstupního parametru typu WCHAR by měl být wType struktury DBBINDING nastaven na DBTYPE_WSTR.

Při provádění příkazu s parametry ovladač sestaví informace o datovém typu parametru. Pokud se typ vstupní vyrovnávací paměti a datový typ parametru shodují, v ovladači se neprovede žádný převod. V opačném případě ovladač převede buffer vstupního parametru na datový typ parametru. Datový typ parametru může uživatel explicitně nastavit voláním ICommandWithParameters::SetParameterInfo. Pokud informace nejsou zadané, ovladač odvozuje informace o datovém typu parametru načtením metadat sloupců ze serveru při přípravě příkazu nebo (b) pokusem o výchozí převod z datového typu vstupního parametru.

Vyrovnávací paměť vstupního parametru může být převedena na kolaci sloupce serveru ovladačem nebo serverem v závislosti na datovém typu vstupní vyrovnávací paměti a datovém typu parametru. Během převodu může dojít ke ztrátě dat, pokud znaková sada klienta nebo znaková stránka kolace databáze nemohou představovat všechny znaky ve vstupním bufferu. Následující tabulka popisuje proces převodu při vkládání dat do sloupce s podporou UTF-8:

Datový typ vyrovnávací paměti Datový typ parametru Conversion Bezpečnostní opatření pro uživatele
DBTYPE_STR DBTYPE_STR Převod serveru ze znakové stránky klienta na znakovou stránku kolace databáze; Převod serveru ze znakové stránky kolace databáze na znakovou stránku kolace sloupců Zajistěte, aby znaková stránka klienta a znaková stránka kolace databáze představovaly všechny znaky ve vstupních datech. Například pro vložení polského znaku může být znaková stránka klienta nastavena na 1250 (ANSI Central European) a kolace databáze může používat polštinu jako označovač kolace (například Polish_100_CI_AS_SC) nebo může být použito UTF-8.
DBTYPE_STR DBTYPE_WSTR Převod ovladače ze znakové stránky klienta na kódování UTF-16; převod serveru z kódování UTF-16 na znakovou stránku kolace sloupců. Ujistěte se, že znaková stránka klienta může představovat všechny znaky ve vstupních datech. Například pro vložení polského znaku může být znaková stránka klienta nastavena na hodnotu 1250 (ANSI Central European).
DBTYPE_WSTR DBTYPE_STR Převod ovladačů z kódování UTF-16 na znakovou stránku kolace databáze; Převod serveru ze znakové stránky kolace databáze na znakovou stránku kolace sloupců Zajistěte, že kódová stránka kolace databáze může reprezentovat všechny znaky ve vstupních datech. Pokud například chcete vložit polský znak, znaková stránka kolace databáze může použít polštinu jako designátor třídění (například Polish_100_CI_AS_SC) nebo být povolena pro UTF-8.
DBTYPE_WSTR DBTYPE_WSTR Převod serveru z UTF-16 na znakovou stránku kolace sloupců Žádné.

Načítání dat ze sloupce CHAR s kódováním UTF-8 nebo VARCHAR

Při vytváření vyrovnávací paměti pro načtená data je vyrovnávací paměť popsaná pomocí pole struktur DBBINDING. Každá struktura DBBINDING přidruží v načteném řádku jeden sloupec. Pokud chcete data sloupce načíst jako CHAR, nastavte wType struktury DBBINDING na DBTYPE_STR. Pokud chcete načíst data sloupce jako WCHAR, nastavte typ wType struktury DBBINDING na DBTYPE_WSTR.

U indikátoru typu vyrovnávací paměti výsledku DBTYPE_STR ovladač převede data kódovaná UTF-8 na kódování klienta. Uživatel by se měl ujistit, že kódování klienta může představovat data ze sloupce UTF-8, jinak může dojít ke ztrátě dat.

U indikátoru typu vyrovnávací paměti výsledku DBTYPE_WSTR ovladač převede data kódovaná UTF-8 na kódování UTF-16.

Komunikace se servery, které nepodporují UTF-8

Ovladač Microsoft OLE DB pro SQL Server zajišťuje, aby byla data zpřístupněna serveru způsobem, kterému může server rozumět. Při vkládání dat z klientů s UTF-8 podporou řidič překládá řetězce kódovací UTF-8 na znakovou stránku databázové kolace před tím, než je odešle na server.

Poznámka:

Použití rozhraní ISequentialStream pro vkládání dat kódovaných UTF-8 do staršího textového sloupce je omezeno pouze na servery, které podporují UTF-8. Podrobnosti najdete v tématu Objekty BLOBs a OLE.

Viz také

OLE DB Driver for SQL Server Features
Podpora UTF-16 v ovladači OLE DB pro SQL Server