Pokyny pro programování

Stáhnout ovladač ODBC

Tento článek popisuje programátorské aspekty aplikací, které používají ovladač Microsoft ODBC pro SQL Server v systému Linux nebo macOS. Některé odkazy odkazují na materiály pro SQL Server Native Client. Tyto stránky poskytují historický kontext API.

Vyberte verzi ovladače

Pro nový vývoj použijte Microsoft ODBC Driver 18 pro SQL Server, současnou řadu ovladačů. Microsoft ODBC Driver 17 pro SQL Server zůstává podporován pro aplikace, které jej již nasadují, jak je popsáno v životním cyklu podpory. ODBC Driver 13, který byl dodáván se SQL Server 2017, je způsobilý pro rozšířenou podporu do 12. října 2027, pouze na základě smlouvy o rozšířené podpoře.

Zadejte název nainstalovaného ovladače ve svém připojovací řetězec, uzavřeném ve složených závorkách:

Driver={ODBC Driver 18 for SQL Server}
Driver={ODBC Driver 17 for SQL Server}

V názvu datového zdroje (DSN) v odbc.ini použijte název bez složených závorek, například Driver = ODBC Driver 18 for SQL Server. Pro syntaxi DSN viz Klíčová slova řetězců připojení a názvy datových zdrojů (DSN).

Nastavení připojení pro konkrétní verzi najdete v Rozdíly mezi hlavními verzemi. Termíny podpory a kompatibilitu operačního systému viz životní cyklus podpory a požadavky na systém.

Vytvořte aplikaci

Informace o umístění hlaviček, pořadí, příkazech kompilátoru, názvech knihoven a ukázce v jazyce C++ najdete v tématech Vývoj aplikací v jazycích C a C++ s ovladačem ODBC a Připojení a dotazování pomocí C++ a ODBC.

Aplikace ODBC může využívat více aktivních sad výsledků (MARS) a další specifické funkce SQL Serveru tím, že za hlavičky unixODBC vloží msodbcsql.h (sql.h, sqlext.h, sqltypes.h a sqlucode.h). Používejte stejné symbolické názvy pro SQL Server specifické položky, jaké používáte ve Windows ODBC aplikacích.

Najít možnosti ovladače

Začněte s ODBC Programmer's Reference pro standardní aplikační programovací rozhraní (API). Pak použijte aktuální dokumentaci ovladačů pro chování specifické pro ovladač.

Přehled Microsoft ODBC ovladače pro SQL Server odkazuje na dokumentaci ovladače. Následující články o SQL Server Native Client poskytují API kontext pro aplikace, které ovladač používají na Linuxu a macOS:

Limitations

U následujících funkcí nebylo ověřeno, že fungují správně v ovladači ODBC na Linuxu a macOS:

Nepodporované funkce

Následující funkce nejsou dostupné v ovladači ODBC na Linuxu a macOS:

  • Distribuované transakce prostřednictvím atributu SQL_ATTR_ENLIST_IN_DTC . Ovladač podporuje XA transakce prostřednictvím služba MS DTC (Microsoft Distributed Transaction Coordinator) (DTC). Pro více informací viz Použití XA transakcí s DTC.

  • Zrcadlení databáze

  • FILESTREAM

  • Profilování výkonu ovladačů ODBC, popsané v SQLSetConnectAttr, a následující atributy připojení související s výkonem:

    • SQL_COPT_SS_PERF_DATA
    • SQL_COPT_SS_PERF_DATA_LOG
    • SQL_COPT_SS_PERF_DATA_LOG_NOW
    • SQL_COPT_SS_PERF_QUERY
    • SQL_COPT_SS_PERF_QUERY_INTERVAL
    • SQL_COPT_SS_PERF_QUERY_LOG
  • SQLBrowseConnect před verzí 17.2.

  • Typy intervalů C, například SQL_C_INTERVAL_YEAR_TO_MONTH, jsou zdokumentovány v Data Type Identifiers and Descriptors.

  • Hodnota atributu SQL_ATTR_ODBC_CURSORS objektu SQLSetConnectAttr je SQL_CUR_USE_ODBC.

Zpracujte znaková data

Na Linuxu a macOS používejte UTF-16 SQLWCHAR buffery s ODBC širokoznakovými API místo nativního wchar_t typu. Rozhraní ovladače používá 16bitové kódové jednotky.

Kódování znaků

Pro ODBC ovladače 13 a 13.1 musíte použít UTF-8 pro SQLCHAR data. Tyto verze nepodporují žádné jiné kódování.

Od verze ODBC Driver 17 podporované znakové sady a kódování pro data SQLCHAR zahrnují:

Poznámka:

Kvůli rozdílům iconv mezi musl a glibc není mnoho z těchto národních prostředí v Alpine Linuxu podporováno. Pro více informací viz Funkční rozdíly oproti glibc.

Název Description
UTF-8 Unicode
CP437 MS-DOS usa – latinka
CP850 MS-DOS latinka 1
CP874 Latinka/thajština
CP932 Japonština (Windows kódová stránka 932)
CP936 Zjednodušená čínština, GBK
CP949 Korejština (Windows kódová stránka 949)
CP950 Tradiční čínština, Big5
CP1250 Středoevropská
CP1251 Cyrilice
CP1252 Západoevropská
CP1253 Řečtina
CP1254 Turečtina
CP1255 Hebrejština
CP1256 Arabština
CP1257 Balt
CP1258 Vietnamština
ISO-8859-1 Latinka-1
ISO-8859-2 Latinka-2
ISO-8859-3 Latinka-3
ISO-8859-4 Latin-4
ISO-8859-5 Latinka/cyrilice
ISO-8859-6 Latinka/arabština
ISO-8859-7 Latinka/řečtina
ISO-8859-8 Hebrejština
ISO-8859-9 Turečtina
ISO-8859-13 Latinka-7
ISO-8859-15 Latin-9

Když se připojíte, ovladač detekuje aktuální národní prostředí procesu, ve kterém je načten. Pokud lokalita používá jedno z uvedených kódování, ovladač použije toto kódování pro SQLCHAR (úzkoznaková) data. Jinak je výchozí hodnota UTF-8. Procesy začínají ve výchozím nastavení v národním prostředí C, což způsobí, že ovladač se automaticky nastaví na UTF-8. Pokud aplikace potřebuje jedno z uvedených kódování, zavolejte setlocale před připojením. Explicitně zadejte národní prostředí nebo použijte prázdný řetězec (například setlocale(LC_ALL, "")), aby se použilo nastavení národního prostředí daného prostředí.

V typickém prostředí Linuxu nebo macOS, kde je kódování UTF-8, uživatelé ODBC Driver 17 při upgradu z 13 nebo 13.1 nezaznamenají rozdíly. Aplikace, které používají uvedené jiné než UTF-8 kódování prostřednictvím setlocale, musí toto kódování používat pro data do ovladače a z ovladače místo UTF-8.

Musíte použít UTF-16LE (malý endian) pro SQLWCHAR data.

Když navážete vstupní parametry pomocí SQLBindParameter, pokud zadáte úzký typ znaku v SQL, například SQL_VARCHAR, ovladač převede dodaná data z klientského kódování na serverové kódování pro daný parametr. Kódování závisí na řazení; nejde vždy o kódovou stránku 1252. U výstupních parametrů ovladač převede kódování zadané v informacích kolace přidružených k datům na kódování klienta. Znaky ve zdrojovém kódování, které nejsou reprezentovatelné v cílovém kódování, se převádějí na otazník (?).

Aby se této ztrátě dat při vázání vstupních parametrů předešlo, zadejte znakový datový typ SQL Unicode, například SQL_WVARCHAR. Ovladač převádí klientské kódování na UTF-16, které může reprezentovat všechny znaky Unicode. Cílový sloupec nebo parametr musí být také Unicode typ (nchar, nvarchar nebo ntext) nebo typ s kolací či kódováním, které dokáže reprezentovat všechna původní zdrojová data. Pro výstupní parametry zadejte Unicode SQL typ a buď Unicode C typ (SQL_C_WCHAR), který způsobí, že ovladač vrátí data jako UTF-16, nebo úzký C typ s klientským kódováním, které může reprezentovat zdrojová data. UTF-8 může tato data vždy reprezentovat.

Pro více informací o kolacích a kódování viz Kolace a podpora Unicode.

Existují rozdíly v konverzi mezi verzemi Windows a Linuxu nebo macOSiconv:

  • U kódové stránky 1255 se bajt 0xCA převádí na kódový bod 0x05BA UTF-16 ve Windows a na 0x00CA v macOS a Linuxu u verzí libiconv starších než 1.15.
  • iconv Linuxové knihovny bez revize Big5/CP950 z roku 2003 (BIG5-2003) nepřevádějí správně znaky přidané v této revizi.
  • U kódové stránky 932 (japonština, Shift-JIS) se dekódování znaků, které nejsou definovány ve standardu kódování, liší. Například bajt 0x80 se převede na U+0080 ve Windows a na Linuxu a macOS může být U+30FB, v závislosti na verzi iconv.

V ovladačích ODBC 13 a 13.1 vede rozdělení vícebajtových znaků UTF-8 nebo zástupných dvojic UTF-16 mezi buffery SQLPutData k poškození dat. Používejte streamovací buffery, které nekončí uprostřed kódování znaku. Toto omezení bylo odstraněno v ODBC Driver 17.

Pro pokyny pro kódování znaků, konverzi, vázání parametrů a velikost bufferu viz Známé problémy.

OpenSSL

Počínaje verzí ODBC Driver 17.4 ovladač dynamicky načítá OpenSSL, což mu umožňuje běžet v systémech s verzí 1.0 nebo 1.1 bez samostatných souborů ovladače. Od verze 17.9 ovladač kromě předchozích verzí podporuje OpenSSL 3.0. Když je přítomno více verzí OpenSSL, ovladač se snaží načíst podporovanou verzi ze svých vyhledávacích cest ke knihovnám.

Verze ovladače Podporované verze OpenSSL
17,4 až 17,8 1.0, 1.1
Verze 17.9 a pozdější verze 17.x a všechny verze Driver 18 1.0, 1.1, 3.0

OpenSSL 4 není podporován. Na macOS může Homebrew openssl odkaz směřující na OpenSSL 4 zabránit načtení OpenSSL, i když je nainstalován OpenSSL 3. Zkontrolujte cestu knihovny i nainstalované verze.

Poznámka:

Potenciální konflikt může nastat, pokud je aplikace, která používá ovladač nebo některou z jeho komponent, propojena s jinou verzí OpenSSL nebo ji dynamicky načítá. Pokud je v systému několik verzí OpenSSL a aplikace je používá, ujistěte se, že mezi verzí načtenou aplikací a ovladačem není nesoulad. Chyby mohou poškodit paměť a nemusí se projevovat zjevně nebo konzistentně.

Alpine Linux

Výchozí velikost zásobníku pro nová vlákna v musl je 128 KB, není-li ve spustitelném souboru požadována větší výchozí velikost. Vlákno může tento limit překročit při volání ovladače. Propojte aplikaci ODBC v Alpine Linuxu pomocí -Wl,-z,stack-size=<size_in_bytes> a požádejte o větší výchozí zásobník vlákna. Aplikace, které vytvářejí vlákna s explicitní velikostí zásobníku, musí také zvolit odpovídající velikost pro tato vlákna.

Zásobník hlavního vlákna a výchozí zásobník pro nová vlákna nejsou totéž nastavení. Na glibc systémech výchozí hodnota pro nová vlákna obvykle odpovídá limitu zásobníkových zdrojů procesu, s architekturálně specifickou záložní hodnotou, pokud je tento limit neomezený. Nepředpokládejte pevnou výchozí hodnotu 2 MB napříč systémy Linux.

Další poznámky

Pro vytvoření dedikovaného administrátorského připojení (DAC) z aplikace ODBC nastavte Server=tcp:<server>,<dac_port> ve svém řetězci připojení. Použijte zjištěný port DAC, ne běžný port pro připojení instance. Například pokud je DAC port 33000, nastavte Server=tcp:<server>,33000. Tyto fragmenty spojovacích řetězců specifikují pouze koncový bod, nikoli autentizaci. Konfigurujte autentizaci a ověřování serverového certifikátu zvlášť.

Login musí být členem role serveru sysadmin. Vzdálený přístup vyžaduje povolení možnosti vzdálených připojení pro správu na serveru. Pro požadavky na přístup, konfiguraci serveru a postupy správy příkazové řádky viz Diagnostické spojení pro správce databází. Pro objevování portů viz DAC port.

Správce ovladačů unixODBC zpracovává atributy příkazu předávané SQLSetConnectAttr stejným způsobem jako správce ovladačů Windows. Možnosti statementů ODBC 2.x, jako SQL_ATTR_QUERY_TIMEOUT a SQL_ATTR_MAX_ROWS, platí pro stávající i nové statementy pro dané připojení. Atributy ODBC 3.x pouze pro příkazy, jako SQL_ATTR_ROW_ARRAY_SIZE a SQL_ATTR_PARAMSET_SIZE, vracejí SQLSTATE HY092. Atributy definované jak na úrovni připojení, tak na úrovni příkazu, jako je SQL_ATTR_METADATA_ID, lze nastavit na kterékoliv úrovni. Nastavení atributů pouze pro příkazy na úrovni spojení je v ODBC 3.x zastaralé, takže místo toho volejte SQLSetStmtAttr . Pro více informací viz funkce SQLSetConnectAttr.

Ve vysoce vícevláknových aplikacích se může validace popisovačů unixODBC stát omezením výkonu jako úzkým hrdlem. Kompilace unixODBC pomocí --enable-fastvalidate mohla zlepšit výkon. Tato možnost však může způsobit, že aplikace, které předávají neplatné popisovače rozhraním ODBC API, mohou spadnout, místo aby vrátily SQL_INVALID_HANDLE.

Pro kroky instalace a konfigurace platformy viz: