Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo contém uma lista de problemas conhecidos com o Microsoft ODBC Driver 13, 13.1, 17 e 18 para SQL Server em Linux e macOS. Ele também contém etapas para solucionar problemas de conectividade.
Known issues
Para questões adicionais, consulte o blog Drivers do SQL Server.
Devido às limitações da biblioteca do sistema, o Alpine Linux é compatível com menos codificações e localidades de caracteres. Por exemplo,
en_US.UTF-8não está disponível. Para mais informações, consultemusl libc- diferenças funcionais em relação aoglibc.Windows, Linux e macOS convertem caracteres da PUA (Área de Uso Particular) ou EUDC (Caracteres Definidos pelo Usuário Final ) de maneira diferente. Conversões executadas no servidor no Transact-SQL usam a biblioteca de conversão do Windows. Conversões no driver usam as bibliotecas de conversão do Windows, do Linux ou do macOS. Cada biblioteca pode produzir resultados diferentes ao executar essas conversões. Para obter mais informações, confira End-User-Defined and Private Use Area Characters (Caracteres de área de uso privado e definidos pelo usuário final).
Se a codificação de cliente for UTF-8, o gerenciador de driver nem sempre converterá corretamente UTF-8 em UTF-16. Atualmente, os dados são corrompidos quando um ou mais caracteres da cadeia de caracteres não são caracteres UTF-8 válidos. Caracteres ASCII são mapeados corretamente. O gerenciador de driver tentará fazer essa conversão ao chamar as versões SQLCHAR da API do ODBC (por exemplo, SQLDriverConnectA). O gerenciador de driver não tenta essa conversão ao chamar as versões SQLWCHAR da API ODBC (por exemplo, SQLDriverConnectW).
O parâmetro ColumnSize refere-se
SQLBindParameterao número de caracteres no tipo SQL, enquanto BufferLength é o número de bytes no buffer do aplicativo. No entanto, se o tipo de dados SQL for varchar(n) ou char(n), o aplicativo associa o parâmetro comoSQL_C_CHARpara o tipo C, eSQL_CHARouSQL_VARCHARpara o tipo SQL e a codificação de caracteres do cliente for UTF-8, você poderá receber um erroString data, right truncationdo driver, mesmo se o valor de ColumnSize estiver alinhado com o tamanho do tipo de dados no servidor. Esse erro ocorre porque as conversões entre codificações de caracteres podem alterar o comprimento dos dados. Por exemplo, um caractere apóstrofo à direita (U+2019) é codificado em CP-1252 como o byte0x92único, mas em UTF-8 como a sequência0xE2 0x80 0x99de 3 bytes.
Por exemplo, se a codificação for UTF-8 e você especificar 1 para BufferLength e ColumnSize em SQLBindParameter para um parâmetro de saída, e então tentar recuperar o caractere anterior armazenado em uma char(1) coluna em um servidor que usa CP-1252, o driver tentará converter o caractere para a codificação UTF-8 de 3 bytes, mas não consegue encaixar o resultado em um buffer de 1 byte. Na outra direção, ele compara ColumnSize com o BufferLengthSQLBindParameter antes de fazer a conversão entre as diferentes páginas de código no cliente e no servidor. Como um ColumnSize de valor 1 é menor que um BufferLength de valor 3 (por exemplo), o driver gerará um erro. Para evitar esse erro, verifique se o comprimento dos dados após a conversão se adapta à coluna ou ao buffer especificado. ColumnSize não pode ser maior que 8000 para o varchar(n) tipo.
Solucionar problemas de conexão
Se não for possível estabelecer uma conexão com o SQL Server usando o driver ODBC, use as informações a seguir para identificar o problema.
O problema de conexão mais comum é ter duas cópias do gerenciador de driver UnixODBC instaladas. Pesquise por libodbc*.so* em /usr. Se houver mais de uma versão do arquivo, você (possivelmente) tem mais de um gerenciador de driver instalado. Seu aplicativo pode usar a versão errada.
Habilite o log de conexão editando seu /etc/odbcinst.ini arquivo para conter a seguinte seção com estes itens:
[ODBC]
Trace = Yes
TraceFile = (path to log file, or /dev/stdout to output directly to the terminal)
Se você receber outra falha de conexão e não vir um arquivo de log, (possivelmente) haverá duas cópias do gerenciador de driver no computador. Caso contrário, a saída do log será semelhante a:
[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'
Se a codificação de caracteres ASCII não for UTF-8, por exemplo:
UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'
Há mais de um gerenciador de driver instalado e seu aplicativo está usando o errado ou o gerenciador de driver não foi criado corretamente.
Alguns usuários do macOS encontram o seguinte erro com a versão 17.8 ou mais antiga do driver:
[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)
O erro pode ocorrer quando o OpenSSL 3.0 está instalado. O OpenSSL normalmente é instalado por meio do Homebrew e contém os binários openssl, openssl@1.1 e openssl@3.
Para resolver esse erro, altere o symlink do binário OpenSSL para 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
Para obter mais informações sobre como resolver falhas de conexão, consulte:
- Etapas para solucionar problemas de conectividade do SQL
- Solução de problema de conectividade do SQL Server 2005 – Parte I
- Solução de problema de conectividade no SQL Server 2008 com o Buffer de Anéis de Conectividade
- Solução de problemas de autenticação do SQL Server