Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo contém uma lista de problemas conhecidos com o Microsoft ODBC Driver 13, 13.1, 17 e 18 para SQL Server no Linux e macOS. Ele também contém etapas para solucionar problemas de conectividade.
Known issues
Para problemas adicionais, consulte o blog Drivers do SQL Server.
Devido às limitações da biblioteca do sistema, o Alpine Linux suporta menos codificações de caracteres e localidades. Por exemplo,
en_US.UTF-8não está disponível. Para obter mais informações, consultemusl libc- diferenças funcionais deglibc.Windows, Linux e macOS convertem caracteres da Área de Uso Privado (PUA) ou Caracteres Definidos pelo Utilizador Final (EUDC) de forma diferente. As conversões realizadas no servidor dentro do Transact-SQL usam a biblioteca de conversões do Windows. As conversões no driver usam as bibliotecas de conversão do Windows, Linux ou macOS. Cada biblioteca pode produzir resultados diferentes ao executar essas conversões. Para obter mais informações, consulte Caracteres Definidos pelo Utilizador e de Área de Uso Privado.
Se a codificação do cliente for UTF-8, o gerenciador de driver nem sempre converte corretamente de UTF-8 para UTF-16. Atualmente, a corrupção de dados ocorre quando um ou mais caracteres na cadeia de caracteres não são caracteres UTF-8 válidos. Os caracteres ASCII são mapeados corretamente. O gerenciador de driver tenta essa conversão ao chamar as versões SQLCHAR da API 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 de
SQLBindParameterrefere-se ao 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), a aplicação liga o parâmetro comoSQL_C_CHARpara o tipo C e comoSQL_CHARouSQL_VARCHARpara o tipo SQL, e se a codificação de caracteres do cliente for UTF-8, poderá ocorrer um erroString data, right truncationdo driver, mesmo que o valor de ColumnSize esteja alinhado com o tamanho do tipo de dados no servidor. Este erro ocorre uma vez que as conversões entre codificações de caracteres podem alterar o comprimento dos dados. Por exemplo, um caractere apóstrofo direito (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 especificar 1 para BufferLength e ColumnSize em SQLBindParameter para um parâmetro de saída, e tentar recuperar o caractere anterior armazenado em uma char(1) coluna no servidor (usando CP-1252), o driver tentará convertê-lo para a codificação UTF-8 de 3 bytes, mas não consegue acomodar o resultado em um buffer de 1 byte. Na outra direção, ele compara ColumnSize com o BufferLength antes SQLBindParameter de fazer a conversão entre as diferentes páginas de código no cliente e no servidor. Como um ColumnSize de 1 é menor que um BufferLength de (por exemplo) 3, o driver gera um erro. Para evitar esse erro, verifique se o comprimento dos dados após a conversão se encaixa no buffer ou coluna especificados.
ColumnSize não pode ser maior que 8000 para o varchar(n) tipo.
Solucionar problemas de conexão
Se você não conseguir fazer 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 instalado. Pesquise /usr por libodbc*.so*. Se você vir 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 tiveres outra falha de conexão e não vires um arquivo de log, pode haver (possivelmente) duas cópias do gestor de drivers no teu computador. Caso contrário, a saída do log deve 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 construído corretamente.
Alguns usuários do macOS encontram o seguinte erro com a versão do driver 17.8 ou anterior:
[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 acontecer quando o OpenSSL 3.0 está instalado. OpenSSL normalmente é instalado através do Homebrew, e contém o openssl, openssl@1.1e openssl@3 binários.
Para resolver esse erro, altere o link simbólico 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 SQL
- Solução de problemas de conectividade do SQL Server 2005 - Parte I
- Solução de problemas de conectividade no SQL Server 2008 com o buffer de anel de conectividade
- Solução de problemas de autenticação do SQL Server