Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
- Komunikace s SQL Serverem (ODBC)
- Podpora vypršení časového limitu připojení a dotazu
- Cursors
- Vylepšení data a času (ODBC)
- Provádění dotazů (ODBC)
- Zpracování chyb a zpráv
- Ověřování protokolem Kerberos
- Velké uživatelsky definované typy modulu CLR (Common Language Runtime) (ODBC)
- Provádění transakcí (ODBC). Pro distribuované transakce na Linuxu a macOS používejte XA transakce s DTC.
- Zpracování výsledků (ODBC)
- Spouštění uložených procedur
- Podpora řídkých sloupců (ODBC)
- Použití šifrování bez ověření
- Parametry tabulkového typu
- UTF-8 a UTF-16 pro příkazové a datové API
- Použití katalogových funkcí
Limitations
U následujících funkcí nebylo ověřeno, že fungují správně v ovladači ODBC na Linuxu a macOS:
- Připojení ke klastru převzetí služeb při selhání
- Transparentní síťový překlad IP adres před ODBC Driver 17.
- Trasování integrované diagnostiky (BID) ovladače ODBC pro Linux a macOS před verzí 17.3.
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_DATASQL_COPT_SS_PERF_DATA_LOGSQL_COPT_SS_PERF_DATA_LOG_NOWSQL_COPT_SS_PERF_QUERYSQL_COPT_SS_PERF_QUERY_INTERVALSQL_COPT_SS_PERF_QUERY_LOG
SQLBrowseConnectpř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_CURSORSobjektuSQLSetConnectAttrjeSQL_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
0xCApřevádí na kódový bod0x05BAUTF-16 ve Windows a na0x00CAv macOS a Linuxu u verzílibiconvstarších než 1.15. -
iconvLinuxové 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
0x80se převede na U+0080 ve Windows a na Linuxu a macOS může být U+30FB, v závislosti na verziiconv.
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:
- Nainstalujte ovladač ODBC na Linux.
- Nainstalujte ODBC ovladač na macOS.
- Nainstalujte správce ovladačů unixODBC.
- Konfigurujte spojovací řetězce a DSN.
- Zkontrolujte požadavky systému.