Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln innehåller en lista över kända problem med Microsoft ODBC Driver 13, 13.1, 17 och 18 för SQL Server i Linux och macOS. Den innehåller också steg för att felsöka anslutningsproblem.
Known issues
Ytterligare problem finns i sql Server-drivrutinsbloggen.
På grund av systembiblioteksbegränsningar stöder Alpine Linux färre teckenkodningar och nationella inställningar. Det är till exempel
en_US.UTF-8inte tillgängligt. Mer information finns imusl libc– funktionella skillnader frånglibc.Windows, Linux och macOS konverterar tecken från det privata användningsområdet (PUA) eller End User-Defined Characters (EUDC) på olika sätt. Konverteringar som utförs på servern i Transact-SQL använda Windows-konverteringsbiblioteket. Konverteringar i drivrutinen använder konverteringsbiblioteken för Windows, Linux eller macOS. Varje bibliotek kan ge olika resultat när du utför dessa konverteringar. Mer information finns i Slutanvändardefinierade och tecken för privat användning.
Om klientkodningen är UTF-8 konverterar inte drivrutinshanteraren alltid korrekt från UTF-8 till UTF-16. För närvarande uppstår dataskada när ett eller flera tecken i strängen inte är giltiga UTF-8 tecken. ASCII-tecken mappas korrekt. Drivrutinshanteraren försöker utföra den här konverteringen när sqlchar-versionerna av ODBC-API:et anropas (till exempel SQLDriverConnectA). Drivrutinshanteraren försöker inte utföra den här konverteringen när du anropar SQLWCHAR-versionerna av ODBC-API:et (till exempel SQLDriverConnectW).
Parametern
SQLBindParameteri refererar till antalet tecken i SQL-typen, medan BufferLength är antalet byte i programmets buffert. Men om SQL-datatypen är varchar(n) eller char(n), programmet binder parametern somSQL_C_CHARför C-typen ochSQL_CHARellerSQL_VARCHARför SQL-typen, och teckenkodningen för klienten är UTF-8, kan du få ettString data, right truncationfel från drivrutinen även om värdet för ColumnSize är justerat med storleken på datatypen på servern. Det här felet uppstår eftersom konverteringar mellan teckenkodningar kan ändra datalängden. Till exempel kodas ett höger apostrofertecken (U+2019) i CP-1252 som enkel byte0x92, men i UTF-8 som 3-byte-sekvensen0xE2 0x80 0x99.
Om din kodning till exempel är UTF-8 och du anger 1 för både BufferLength och ColumnSize i SQLBindParameter för en out-parameter och sedan försöker hämta föregående tecken som lagras i en char(1) kolumn på servern (med CP-1252) försöker drivrutinen konvertera det till kodningen 3 byte UTF-8, men får inte plats med resultatet i en buffert på 1 byte. I den andra riktningen jämförs ColumnSize med BufferLength i SQLBindParameter innan konverteringen mellan de olika kodsidorna på klienten och servern. Eftersom en ColumnSize på 1 är mindre än en BufferLength av (till exempel) 3 genererar drivrutinen ett fel. Undvik det här felet genom att se till att längden på data efter konverteringen passar in i den angivna bufferten eller kolumnen.
ColumnSize får inte vara större än 8 000 för varchar(n) typen.
Felsöka anslutningsproblem
Om du inte kan upprätta en anslutning till SQL Server med hjälp av ODBC-drivrutinen använder du följande information för att identifiera problemet.
Det vanligaste anslutningsproblemet är att ha två kopior av UnixODBC-drivrutinshanteraren installerad. Sök /usr efter libodbc*.so*. Om du ser mer än en version av filen har du (möjligen) fler än en drivrutinshanterare installerad. Programmet kan använda fel version.
Aktivera anslutningsloggen genom att redigera /etc/odbcinst.ini filen så att den innehåller följande avsnitt med följande objekt:
[ODBC]
Trace = Yes
TraceFile = (path to log file, or /dev/stdout to output directly to the terminal)
Om du får ett annat anslutningsfel och inte ser någon loggfil finns det (möjligen) två kopior av drivrutinshanteraren på datorn. Annars bör loggutdata se ut ungefär så här:
[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'
Om ASCII-teckenkodningen inte är UTF-8, till exempel:
UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'
Det finns fler än en drivrutinshanterare installerad och ditt program använder fel, eller så har drivrutinshanteraren inte skapats korrekt.
Vissa macOS-användare stöter på följande fel med drivrutinsversion 17.8 eller senare:
[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)
Felet kan inträffa när OpenSSL 3.0 har installerats. OpenSSL installeras vanligtvis via Homebrew och innehåller binärfilerna openssl, openssl@1.1och openssl@3 .
Lös det här felet genom att ändra symlinken för OpenSSL-binärfilen till 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
Mer information om hur du löser anslutningsfel finns i:
- Steg för att felsöka PROBLEM med SQL-anslutning
- Felsökning av SQL Server 2005-anslutningsproblem – del I
- Felsökning av anslutningar i SQL Server 2008 med anslutningsringsbufferten
- Felsökare för SQL Server-autentisering