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 bevat een lijst met bekende problemen met het Microsoft ODBC-stuurprogramma 13, 13.1, 17 en 18 voor SQL Server op Linux en macOS. Het bevat ook stappen voor het oplossen van verbindingsproblemen.
Known issues
Voor aanvullende problemen, zie de SQL Server-blog.
Vanwege systeembibliotheekbeperkingen ondersteunt Alpine Linux minder tekencoderingen en landinstellingen. Is bijvoorbeeld
en_US.UTF-8niet beschikbaar. Zie voor meer informatiemusl libc- functionele verschillen vanglibc.Windows, Linux en macOS converteren tekens uit het gebied voor privégebruik (PUA) of eindgebruikersgedefinieerde tekens (EUDC) op verschillende manieren. Conversies die worden uitgevoerd op de server binnen Transact-SQL de Windows-conversiebibliotheek gebruiken. Conversies in het stuurprogramma maken gebruik van de Windows-, Linux- of macOS-conversiebibliotheken. Elke bibliotheek kan verschillende resultaten opleveren bij het uitvoeren van deze conversies. Zie voor meer informatie Gebruikersgedefinieerde- en Privégebruik-gebiedtekens.
Als de clientcodering UTF-8 is, converteert de stuurprogrammamanager niet altijd correct van UTF-8 naar UTF-16. Gegevensbeschadiging treedt momenteel op wanneer een of meer tekens in de tekenreeks geen geldige UTF-8 tekens zijn. ASCII-tekens worden correct toegewezen. De stuurprogrammabeheerder probeert deze conversie uit te voeren bij het aanroepen van de SQLCHAR-versies van de ODBC-API (bijvoorbeeld SQLDriverConnectA). De stuurprogrammabeheerder probeert deze conversie niet uit te voeren bij het aanroepen van de SQLWCHAR-versies van de ODBC-API (bijvoorbeeld SQLDriverConnectW).
De parameter
SQLBindParameterverwijst naar het aantal tekens in het SQL-type, terwijl BufferLength het aantal bytes in de buffer van de toepassing is. Als het SQL-gegevenstype echter varchar(n) of char(n) is, koppelt de toepassing de parameter alsSQL_C_CHARvoor het C-type en alsSQL_CHARofSQL_VARCHARvoor het SQL-type, en de tekencodering van de client is UTF-8, dan kunt u mogelijk eenString data, right truncationfout ontvangen van het stuurprogramma, zelfs als de waarde van ColumnSize is uitgelijnd met de grootte van het gegevenstype op de server. Deze fout treedt op omdat conversies tussen tekencoderingen de lengte van de gegevens kunnen wijzigen. Een rechts apostrofteken (U+2019) wordt bijvoorbeeld gecodeerd in CP-1252 als de single-byte0x92, maar in UTF-8 als de 3-bytereeks0xE2 0x80 0x99.
Als uw codering bijvoorbeeld UTF-8 is en u 1 opgeeft voor zowel BufferLength als ColumnSizeSQLBindParameter voor een outparameter, en vervolgens probeert het voorgaande teken op te halen dat is opgeslagen in een char(1) kolom op de server (met CP-1252), probeert het stuurprogramma het te converteren naar de 3-byte UTF-8-codering, maar kan het resultaat niet in een buffer van 1 byte passen. In de andere richting vergelijkt ColumnSize met BufferLength in SQLBindParameter voordat de conversie tussen de verschillende codepagina's op de client en de server plaatsvindt. Omdat een kolomgrootte van 1 kleiner is dan een BufferLength van (bijvoorbeeld) 3, genereert het stuurprogramma een fout. Om deze fout te voorkomen, moet u ervoor zorgen dat de lengte van de gegevens na conversie in de opgegeven buffer of kolom past.
ColumnSize mag niet groter zijn dan 8000 voor het varchar(n) type.
Verbindingsproblemen oplossen
Als u geen verbinding kunt maken met SQL Server met behulp van het ODBC-stuurprogramma, gebruikt u de volgende informatie om het probleem te identificeren.
Het meest voorkomende verbindingsprobleem is het installeren van twee exemplaren van het UnixODBC-stuurprogrammabeheer. Zoek /usr naar libodbc*.so*. Als u meer dan één versie van het bestand ziet, hebt u (mogelijk) meerdere stuurprogrammamanagers geïnstalleerd. Uw toepassing kan de verkeerde versie gebruiken.
Schakel het verbindingslogboek in door het /etc/odbcinst.ini bestand te bewerken en de volgende sectie met deze items te bevatten:
[ODBC]
Trace = Yes
TraceFile = (path to log file, or /dev/stdout to output directly to the terminal)
Als u een andere verbindingsfout krijgt en er geen logboekbestand wordt weergegeven, zijn er (mogelijk) twee kopieën van het stuurprogrammabeheer op uw computer. Anders moet de logboekuitvoer vergelijkbaar zijn met:
[ODBC][28783][1321576347.077780][SQLDriverConnectW.c][290]
Entry:
Connection = 0x17c858e0
Window Hdl = (nil)
Str In = [DRIVER={ODBC Driver 18 for SQL Server};SERVER={contoso.com};Trusted_Connection={YES};WSID={mydb.contoso.com};AP...][length = 139 (SQL_NTS)]
Str Out = (nil)
Str Out Max = 0
Str Out Ptr = (nil)
Completion = 0
UNICODE Using encoding ASCII 'UTF8' and UNICODE 'UTF16LE'
Als de ASCII-tekencodering geen UTF-8 is, bijvoorbeeld:
UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'
Er is meer dan één stuurprogrammabeheer geïnstalleerd en uw toepassing gebruikt het verkeerde stuurprogramma of de stuurprogrammamanager is niet correct gebouwd.
Sommige macOS-gebruikers krijgen de volgende fout met stuurprogrammaversie 17.8 of ouder:
[08001][Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [OpenSSL library could not be loaded, make sure OpenSSL 1.0 or 1.1 is installed]
[08001][Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection (0) (SQLDriverConnect)
De fout kan optreden wanneer OpenSSL 3.0 is geïnstalleerd. OpenSSL wordt doorgaans geïnstalleerd via Homebrew en bevat de openssl, openssl@1.1en openssl@3 binaire bestanden.
Als u deze fout wilt oplossen, wijzigt u de symlink van het binaire OpenSSL-bestand in openssl@1.1:
rm -rf $(brew --prefix)/opt/openssl
version=$(ls $(brew --prefix)/Cellar/openssl@1.1 | grep "1.1")
ln -s $(brew --prefix)/Cellar/openssl@1.1/$version $(brew --prefix)/opt/openssl
Related tasks
Zie voor meer informatie over het oplossen van verbindingsfouten:
- Stappen voor het oplossen van problemen met SQL-connectiviteit
- Verbindingsproblemen met SQL Server 2005 oplossen - deel I
- Connectiviteitsproblemen oplossen in SQL Server 2008 met de connectiviteitsringsbuffer
- Probleemoplosser voor SQL Server-verificatie