Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
ODBC-stuurprogramma downloaden
Dit artikel beschrijft programmeeroverwegingen voor applicaties die de Microsoft ODBC Driver voor SQL Server op Linux of macOS gebruiken. Sommige links wijzen naar SQL Server Native Client-materiaal. Die pagina's geven historische API-context.
Kies een driverversie
Gebruik Microsoft ODBC Driver 18 voor SQL Server, de huidige driverlijn, voor nieuwe ontwikkeling. Microsoft ODBC Driver 17 voor SQL Server blijft ondersteund voor applicaties die het al implementeren, zoals beschreven in de ondersteuningslevensduur. ODBC Driver 13, die met SQL Server 2017 werd geleverd, komt in aanmerking voor uitgebreide ondersteuning tot 12 oktober 2027, alleen onder een verlengde ondersteuningsovereenkomst.
Geef de naam van de geïnstalleerde driver op in je verbindingsreeks, tussen accolades:
Driver={ODBC Driver 18 for SQL Server}
Driver={ODBC Driver 17 for SQL Server}
Gebruik in een gegevensbronnaam (DSN) in odbc.ini de naam zonder accolades, bijvoorbeeld Driver = ODBC Driver 18 for SQL Server. Voor DSN-syntaxis, zie Connection string-trefwoorden en namen van gegevensbronnen (DSN's).
Voor versie-specifieke verbindingsinstellingen, zie Verschillen tussen hoofdversies. Voor ondersteuningsdatums en besturingssysteemcompatibiliteit, zie Support-levenscyclus en systeemvereisten.
Bouw een applicatie
Voor locaties van headerbestanden, de volgorde van includes, compilercommando's, bibliotheeknamen en een voorbeeld van C++, zie Develop C and C++ applications with the ODBC driver en Connect and query with C++ and ODBC.
Een ODBC-applicatie kan Multiple Active Result Sets (MARS) en andere SQL Server-specifieke functies gebruiken door sql.h toe te voegen na de unixODBC-headers (sqltypes.h, sqlucode.h, msodbcsql.h, en sqlext.h). Gebruik dezelfde symbolische namen voor SQL Server-specifieke items die je gebruikt in Windows ODBC-applicaties.
Vind drivermogelijkheden
Begin met de ODBC Programmer's Reference voor de standaard application programming interface (API). Gebruik vervolgens de huidige driverdocumentatie voor driver-specifiek gedrag.
Het overzicht van de Microsoft ODBC Driver voor SQL Server linkt naar de driverdocumentatie. De volgende artikelen over SQL Server Native Client bieden API-context voor applicaties die de driver gebruiken op Linux en macOS:
- Communiceren met SQL Server (ODBC)
- Ondersteuning voor time-out van verbindingen en query's
- Cursors
- Datum/tijd-verbeteringen (ODBC)
- Uitvoeren van queries (ODBC)
- Afhandeling van fouten en berichten
- Kerberos-verificatie
- Grote common language runtime (CLR) gebruikersgedefinieerde types (ODBC)
- Transacties uitvoeren (ODBC). Voor gedistribueerde transacties op Linux en macOS gebruik XA-transacties met DTC.
- Resultaten verwerken (ODBC)
- Opgeslagen procedures uitvoeren
- Ondersteuning voor sparse kolommen (ODBC)
- Encryptie gebruiken zonder validatie
- Parameters met tabelwaarde
- UTF-8 en UTF-16 voor de commando- en data-API
- Gebruik van catalogusfuncties
Limitations
Van de volgende functies is niet geverifieerd dat ze correct werken in de ODBC-driver op Linux en macOS:
- Verbinding met het failovercluster.
- Transparent Network IP Resolution vóór ODBC Driver 17.
- Linux en macOS ODBC Driver Built-In Diagnostics (BID)-tracering in versies vóór ODBC Driver 17.3.
Niet-ondersteunde functies
De volgende functies zijn niet beschikbaar in de ODBC-driver op Linux en macOS:
Gedistribueerde transacties via het
SQL_ATTR_ENLIST_IN_DTCattribuut. De driver ondersteunt XA-transacties via de Microsoft Distributed Transaction Coordinator (DTC). Voor meer informatie, zie Gebruik XA-transacties met DTC.Databasespiegeling.
FILESTREAM.
Zie SQLSetConnectAttr voor het profileren van ODBC-driverprestaties en deze prestatiegerelateerde verbindingsattributen:
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
SQLBrowseConnectvóór versie 17.2.C-intervaltypes zoals
SQL_C_INTERVAL_YEAR_TO_MONTHworden gedocumenteerd in Data Type Identifiers and Descriptors.De
SQL_CUR_USE_ODBCwaarde van hetSQL_ATTR_ODBC_CURSORSattribuut vanSQLSetConnectAttr.
Tekengegevens verwerken
Op Linux en macOS gebruik je UTF-16 SQLWCHAR buffers met ODBC wide-character API's in plaats van het native wchar_t type. De driverinterface gebruikt 16-bits code-eenheden.
Karaktercoderingen
Voor ODBC Driver 13 en 13.1 moet je UTF-8 gebruiken voor SQLCHAR data. Deze versies ondersteunen geen andere coderingen.
Vanaf ODBC Driver 17 worden onder andere de tekenreeksen en coderingen voor SQLCHAR-gegevens ondersteund:
Opmerking
Door iconv verschillen tussen musl en glibc worden veel van deze landinstellingen niet ondersteund op Alpine Linux. Voor meer informatie, zie Functionele verschillen ten opzichte van glibc.
| Naam | Description |
|---|---|
| UTF-8 | Unicode |
| CP437 | MS-DOS Latijns-VS |
| CP850 | MS-DOS Latijns 1 |
| CP874 | Latijns/Thais |
| CP932 | Japans (Windows codepagina 932) |
| CP936 | Vereenvoudigd Chinees, GBK |
| CP949 | Koreaans (Windows codepagina 949) |
| CP950 | Traditioneel Chinees, Big5 |
| CP1250 | Centraal-Europees |
| CP1251 | Cyrillisch |
| CP1252 | West-Europa |
| CP1253 | Grieks |
| CP1254 | Turkse taal |
| CP1255 | Hebreeuws |
| CP1256 | Arabisch |
| CP1257 | Baltische |
| CP1258 | Vietnamees |
| ISO-8859-1 | Latijns-1 |
| ISO-8859-2 | Latijns-2 |
| ISO-8859-3 | Latijns-3 |
| ISO-8859-4 | Latijns-4 |
| ISO-8859-5 | Latijns/Cyrillisch |
| ISO-8859-6 | Latijns/Arabisch |
| ISO-8859-7 | Latijns/Grieks |
| ISO-8859-8 | Hebreeuws |
| ISO-8859-9 | Turkse taal |
| ISO-8859-13 | Latijns-7 |
| ISO-8859-15 | Latijns-9 |
Wanneer je verbinding maakt, detecteert de driver de huidige landinstelling van het proces waarin hij is geladen. Als de locale een van de vermelde coderingen gebruikt, gebruikt de driver die codering voor SQLCHAR-gegevens (smalle tekens). Zo niet, wordt standaard UTF-8 gebruikt. Processen starten standaard in de C locale, waardoor de driver standaard UTF-8 gebruikt. Als een applicatie een van de vermelde coderingen nodig heeft, roep setlocale dan aan voordat je verbinding maakt. Specificeer expliciet de locale, of gebruik een lege string (bijvoorbeeld setlocale(LC_ALL, "")) om de locale-instellingen van de omgeving te gebruiken.
In een typische Linux- of macOS-omgeving waar de codering UTF-8 is, zullen gebruikers van ODBC Driver 17 die upgraden van 13 of 13.1 geen verschillen opmerken. Applicaties die via setlocale een vermelde niet-UTF-8-codering gebruiken, moeten die codering gebruiken voor data naar en van de driver in plaats van UTF-8.
Je moet UTF-16LE (little endian) gebruiken voor SQLWCHAR data.
Wanneer je invoerparameters bindt door SQLBindParameter te gebruiken, zet de driver, als je een smal teken-SQL-type specificeert, zoals SQL_VARCHAR, de geleverde data van de clientcodering om naar de server-side codering voor die parameter. De codering hangt af van de sortering; het is niet altijd codepagina 1252. Voor uitvoerparameters converteert het stuurprogramma van de codering die is opgegeven in de sorteringsgegevens die zijn gekoppeld aan de gegevens naar de clientcodering. Tekens in de broncodering die niet vertegenwoordigbaar zijn in de doelcodering worden omgezet in een vraagteken (?).
Om dit dataverlies bij het binden van invoerparameters te voorkomen, specificeer je een Unicode SQL-tekentype zoals SQL_WVARCHAR. De driver zet de clientcodering om naar UTF-16, die alle Unicode-tekens kan weergeven. De doelkolom of parameter moet ook een Unicode-type zijn (nchar, nvarchar of ntext) of een type met een collatie of codering die alle oorspronkelijke brongegevens kan weergeven. Voor outputparameters specificeer je een Unicode SQL-type en ofwel een Unicode C-type (SQL_C_WCHAR), waardoor de driver data teruggeeft als UTF-16, of een smalle C-type met een clientcodering die de brongegevens kan weergeven. UTF-8 kan deze data altijd weergeven.
Voor meer informatie over collaties en coderingen, zie Collatie en Unicode-ondersteuning.
Er zijn conversieverschillen tussen Windows- en Linux- of macOS-versiesiconv:
- Voor codepagina 1255 converteert byte
0xCAnaar het UTF-16-codepunt0x05BAop Windows en0x00CAop macOS en Linux metlibiconv-versies ouder dan 1.15. - Linux-bibliotheken
iconvzonder de 2003-revisie van Big5/CP950 (BIG5-2003) converteren de in die versie toegevoegde tekens niet correct. - Voor codepagina 932 (Japans, Shift-JIS) verschilt het decoderen van tekens die niet in de coderingsstandaard zijn gedefinieerd. Bijvoorbeeld, byte
0x80converteert naar U+0080 op Windows en kan U+30FB worden op Linux en macOS, afhankelijk van deiconvversie.
In ODBC Driver 13 en 13.1 leidt het splitsen van UTF-8 multibyte tekens of UTF-16 surrogaten over SQLPutData buffers tot datacorruptie. Gebruik streamingbuffers die niet eindigen in onvolledige tekencoderingen van tekens. Deze beperking werd verwijderd in ODBC Driver 17.
Voor richtlijnen voor tekencodering, conversie, parameterbinding en buffer-dimensionering, zie Bekende problemen.
OpenSSL
Vanaf ODBC Driver 17.4 laadt de driver OpenSSL dynamisch, waardoor het kan draaien op systemen met versie 1.0 of 1.1 zonder aparte driverbestanden. Vanaf versie 17.9 ondersteunt het stuurprogramma OpenSSL 3.0 naast de vorige versies. Wanneer er meerdere versies van OpenSSL aanwezig zijn, probeert de driver een ondersteunde versie te laden via zijn bibliotheekzoekpaden.
| Versie van het stuurprogramma | Ondersteunde OpenSSL-versies |
|---|---|
| 17.4 tot en met 17.8 | 1.0, 1.1 |
| 17.9 en latere 17.x-versies, en alle Driver 18-versies | 1.0, 1.1, 3.0 |
OpenSSL 4 wordt niet ondersteund. Op macOS kan een Homebrew-link openssl die naar OpenSSL 4 wijst voorkomen dat de driver OpenSSL laadt, zelfs als OpenSSL 3 is geïnstalleerd. Controleer het bibliotheekpad en de geïnstalleerde versies.
Opmerking
Er kan een potentieel conflict ontstaan als de applicatie die de driver gebruikt, of een van de componenten ervan, koppelt met of dynamisch een andere versie van OpenSSL laadt. Als er meerdere versies van OpenSSL op het systeem aanwezig zijn en de applicatie dit gebruikt, zorg er dan voor dat de door de applicatie geladen versie en de driver niet overeenkomen. De fouten kunnen het geheugen beschadigen en komen mogelijk niet op duidelijke of consistente manieren tot uiting.
Alpine Linux
De standaard stackgrootte voor nieuwe threads in musl is 128 KB, tenzij het uitvoerbare bestand een grotere standaard aanvraagt. Een thread kan deze limiet overschrijden wanneer hij de driver aanroept. Koppel een ODBC-applicatie op Alpine Linux aan -Wl,-z,stack-size=<size_in_bytes> om een grotere standaard threadstack aan te vragen. Applicaties die threads aanmaken met een expliciete stackgrootte moeten ook een geschikte grootte voor die threads kiezen.
De stackinstelling van de hoofdthread en de standaardstackinstelling voor nieuwe threads zijn niet dezelfde. Op glibc systemen volgt de standaard voor nieuwe threads normaal gesproken de stackresourcelimiet van het proces, met een architectuurspecifieke fallback wanneer die limiet onbeperkt is. Ga er niet van uit dat er op Linux-systemen standaard een vaste waarde van 2 MB geldt.
Aanvullende opmerkingen
Om een dedicated administrator-verbinding (DAC) te maken vanuit een ODBC-applicatie, stelt u Server=tcp:<server>,<dac_port> in uw verbindingsreeks in. Gebruik de ontdekte DAC-poort, niet de gewone verbindingspoort van de instantie. Als bijvoorbeeld de DAC-poort 33000 is, stel dan Server=tcp:<server>,33000 in. Deze verbindingsstringfragmenten specificeren alleen het eindpunt, niet authenticatie. Stel authenticatie en validatie van servercertificaten afzonderlijk in.
De login moet lid zijn van de sysadmin serverrol. Externe toegang vereist dat de optie voor externe beheerdersverbindingen van de server is ingeschakeld. Voor toegangsvereisten, serverconfiguratie en procedures voor beheer via de opdrachtregel, zie Diagnostische verbinding voor databasebeheerders. Voor poortontdekking, zie DAC-poort.
De unixODBC driver manager verwerkt statementattributen die worden doorgegeven SQLSetConnectAttr op dezelfde manier als de Windows Driver Manager. ODBC 2.x statementopties, zoals SQL_ATTR_QUERY_TIMEOUT en SQL_ATTR_MAX_ROWS, zijn van toepassing op bestaande en nieuwe statements op de verbinding. ODBC 3.x statement-only attributen, zoals SQL_ATTR_ROW_ARRAY_SIZE en SQL_ATTR_PARAMSET_SIZE, geven SQLSTATE HY092 terug. Attributen gedefinieerd op zowel het verbindings- als het statementniveau, zoals SQL_ATTR_METADATA_ID, kunnen op beide niveaus worden ingesteld. Het instellen van statement-only attributen op het verbindingsniveau is verouderd in ODBC 3.x, dus roep in plaats daarvan SQLSetStmtAttr aan. Voor meer informatie, zie de SQLSetConnectAttr-functie.
In toepassingen met veel threads kan validatie van unixODBC-handles een prestatiebottleneck worden. Het compileren van unixODBC met --enable-fastvalidate kan de prestaties verbeteren. Deze optie kan er echter voor zorgen dat applicaties die ongeldige handles doorgeven aan ODBC-API's crashen in plaats van SQL_INVALID_HANDLE te retourneren.
Voor platforminstallatie- en configuratiestappen, zie:
- Installeer de ODBC-driver op Linux.
- Installeer de ODBC-driver op macOS.
- Installeer de unixODBC driver manager.
- Configureer verbindingsreeksen en DSN's.
- Bekijk de systeemvereisten.