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 descreve considerações de programação para aplicações que utilizam o Driver Microsoft ODBC para SQL Server no Linux ou macOS. Alguns links apontam para material do SQL Server Native Client. Essas páginas fornecem contexto histórico da API.
Escolha uma versão de driver
Use o Microsoft ODBC Driver 18 para SQL Server, a linha atual de drivers, para novos desenvolvimentos. O Driver ODBC 17 da Microsoft para SQL Server continua suportado para aplicações que já o implantam, conforme descrito no ciclo de vida de suporte. O ODBC Driver 13, que foi lançado com o SQL Server 2017, é elegível para suporte estendido até 12 de outubro de 2027, apenas sob um acordo de suporte estendido.
Especifique o nome do driver instalado na sua cadeia de conexão, entre chaves:
Driver={ODBC Driver 18 for SQL Server}
Driver={ODBC Driver 17 for SQL Server}
Em um nome de fonte de dados (DSN) em odbc.ini, use o nome sem chaves, por exemplo Driver = ODBC Driver 18 for SQL Server. Para a sintaxe DSN, veja Palavras-chave de string de conexão e nomes de fontes de dados (DSNs).
Para configurações de conexão específicas de cada versão, veja Diferenças principais de versão. Para datas de suporte e compatibilidade do sistema operacional, veja Ciclo de vida de Suporte e requisitos do sistema.
Construa uma aplicação
Para obter as localizações de cabeçalhos, a ordem de inclusão, os comandos do compilador, os nomes das bibliotecas e um exemplo em C++, veja Desenvolver aplicativos C e C++ com o driver ODBC e Conectar e consultar com C++ e ODBC.
Uma aplicação ODBC pode usar Múltiplos Conjuntos de Resultados Ativos (MARS) e outros recursos específicos do SQL Server ao incluir msodbcsql.h após os cabeçalhos unixODBC (sql.h, sqlext.h, sqltypes.h, e sqlucode.h). Use os mesmos nomes simbólicos para os itens específicos do SQL Server que você usaria em seus aplicativos ODBC do Windows.
Encontrar recursos do driver
Comece com a Referência do Programador ODBC para a interface padrão de programação de aplicações (API). Depois, use a documentação atual do driver para o comportamento específico do driver.
A visão geral do driver Microsoft ODBC para SQL Server faz links para a documentação do driver. Os seguintes artigos do SQL Server Native Client fornecem contexto de API para aplicações que utilizam o driver no Linux e macOS:
- Comunicando-se com o SQL Server (ODBC)
- Suporte de tempo limite de conexão e consulta
- Cursores
- Melhorias de data/hora (ODBC)
- Executando consultas (ODBC)
- Tratamento de erros e mensagens
- Autenticação Kerberos
- Grandes tipos definidos pelo usuário do Common Language Runtime (CLR) (ODBC)
- Execução de transações (ODBC). Para transações distribuídas no Linux e macOS, use transações XA com DTC.
- Resultados de processamento (ODBC)
- Executando procedimentos armazenados
- Suporte de colunas esparsas (ODBC)
- Uso da criptografia sem validação
- Parâmetros com valor de tabela
- UTF-8 e UTF-16 para a API de comandos e dados
- Uso de funções de catálogo
Limitations
Os seguintes recursos não foram verificados para funcionar corretamente no driver ODBC no Linux e macOS:
- Conexão do cluster de failover.
- Resolução IP de Rede Transparente antes do ODBC Driver 17.
- Rastreamento interno de Built-In Diagnostics (BID) do driver ODBC no Linux e macOS antes do Driver ODBC 17.3.
Recursos sem suporte
Os seguintes recursos não estão disponíveis no driver ODBC no Linux e macOS:
Transações distribuídas por meio do atributo
SQL_ATTR_ENLIST_IN_DTC. O driver suporta transações XA por meio do Coordenador de Transações Distribuídas da Microsoft (DTC). Para mais informações, veja Usar transações XA com DTC.Espelhamento de banco de dados.
FILESTREAM.
Criação de perfil do desempenho do driver ODBC, discutido em SQLSetConnectAttr, e estes atributos de conexão relacionados ao desempenho:
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
SQLBrowseConnectantes da versão 17.2.Tipos de intervalo C como
SQL_C_INTERVAL_YEAR_TO_MONTH, documentados em Identificadores e Descritores de Tipo de Dados.O valor
SQL_CUR_USE_ODBCdo atributoSQL_ATTR_ODBC_CURSORSdeSQLSetConnectAttr.
Manipular dados de caracteres
No Linux e macOS, use buffers UTF-16 SQLWCHAR com APIs ODBC de caractere amplo em vez do tipo nativo wchar_t . A interface do controlador utiliza unidades de código de 16 bits.
Codificações de caracteres
Para os drivers ODBC 13 e 13.1, você deve usar UTF-8 para SQLCHAR dados. Essas versões não suportam outras codificações.
A partir do Driver ODBC 17, conjuntos de caracteres e codificações suportados para dados SQLCHAR incluem:
Observação
Devido a diferenças de iconv entre musl e glibc, muitos desses locais não são compatíveis com o Alpine Linux. Para mais informações, veja Diferenças funcionais em relação ao glibc.
| Nome | Descrição |
|---|---|
| UTF-8 | Unicode |
| CP437 | MS-DOS Latim EUA |
| CP850 | MS-DOS Latim 1 |
| CP874 | Latim/tailandês |
| CP932 | Japonês (página de código do Windows 932) |
| CP936 | Chinês simplificado, GBK |
| CP949 | Coreano (página de código do Windows 949) |
| CP950 | Chinês tradicional, Big5 |
| CP1250 | Europeu Central |
| CP1251 | Cirílico |
| CP1252 | Europa Ocidental |
| CP1253 | Grego |
| CP1254 | Turco |
| CP1255 | Hebraico |
| CP1256 | Árabe |
| CP1257 | Báltico |
| CP1258 | Vietnamita |
| ISO-8859-1 | Latim-1 |
| ISO-8859-2 | Latim-2 |
| ISO-8859-3 | Latim-3 |
| ISO-8859-4 | Latim-4 |
| ISO-8859-5 | Latim/cirílico |
| ISO-8859-6 | Latim/árabe |
| ISO-8859-7 | Latim/grego |
| ISO-8859-8 | Hebraico |
| ISO-8859-9 | Turco |
| ISO-8859-13 | Latim-7 |
| ISO-8859-15 | Latim-9 |
Ao conectar, o driver detecta a localidade atual do processo em que ele é carregado. Se a localidade usar uma das codificações listadas, o driver usa essa codificação para dados SQLCHAR (caracteres estreitos). Caso contrário, usa UTF-8 por padrão. Os processos começam no C locale por padrão, o que faz com que o driver use UTF-8 por padrão. Se uma aplicação precisar de uma das codificações listadas, chame setlocale antes de conectar. Especifique explicitamente a localidade ou use uma string vazia (por exemplo, setlocale(LC_ALL, "")) para usar as configurações de localidade do ambiente.
Em um ambiente típico de Linux ou macOS onde a codificação é UTF-8, usuários do ODBC Driver 17 que atualizam do 13 ou 13.1 não notarão diferenças. Aplicações que usam uma codificação setlocale listada que não seja UTF-8 precisam usar essa codificação para dados de e para o driver em vez de UTF-8.
Você deve usar UTF-16LE (little endian) para dados SQLWCHAR .
Quando você vincula parâmetros de entrada usando SQLBindParameter, se você especificar um tipo SQL de caractere estreito, como SQL_VARCHAR, o driver converte os dados fornecidos da codificação do cliente para a codificação do lado do servidor para esse parâmetro. A codificação depende da ordenação; nem sempre é a página de código 1252. Para parâmetros de saída, o driver converte da codificação especificada nas informações de ordenação associadas aos dados na codificação do cliente. Caracteres na codificação de origem que não são representáveis na codificação de destino convertem-se em um ponto de interrogação (?).
Para evitar essa perda de dados ao vincular parâmetros de entrada, especifique um tipo de caractere SQL Unicode, como SQL_WVARCHAR. O driver converte a codificação do cliente para UTF-16, que pode representar todos os caracteres Unicode. A coluna ou parâmetro alvo também deve ser um tipo Unicode (nchar, nvarchar ou ntext) ou um tipo com uma colação ou codificação que possa representar todos os dados de origem originais. Para parâmetros de saída, especifique um tipo Unicode SQL e ou um tipo Unicode C (SQL_C_WCHAR), que faz o driver retornar dados como UTF-16, ou um tipo C não Unicode com uma codificação cliente que pode representar os dados de origem. O UTF-8 sempre pode representar esses dados.
Para obter mais informações sobre ordenações e codificações, confira Compatibilidade com ordenação e Unicode.
Existem diferenças de conversão entre versões de Windows e Linux ou macOSiconv:
- Para a página de código 1255, byte
0xCAconverte para ponto0x05BAde código UTF-16 no Windows e0x00CAno macOS e Linux comlibiconvversões anteriores à 1.15. - Bibliotecas Linux
iconvsem a revisão de 2003 do Big5/CP950 (BIG5-2003) não convertem corretamente os caracteres adicionados nessa revisão. - Para a página de código 932 (japonês, Shift-JIS), a decodificação de caracteres não definidos no padrão de codificação é diferente. Por exemplo, o byte
0x80é convertido em U+0080 no Windows e pode se tornar U+30FB no Linux e no macOS, dependendo da versão doiconv.
Nos drivers ODBC 13 e 13.1, a divisão de caracteres multibyte UTF-8 ou substitutos UTF-16 entre buffers SQLPutData resulta em corrupção de dados. Use buffers de transmissão que não terminem em codificações parciais de caracteres. Essa limitação foi removida no Driver 17 do ODBC.
Para orientações de codificação de caracteres, conversão, vinculação de parâmetros e tamanho de buffer, veja Problemas conhecidos.
Openssl
A partir do Driver ODBC 17.4, o driver carrega o OpenSSL dinamicamente, o que permite que ele rode em sistemas com versões 1.0 ou 1.1 sem arquivos separados do driver. A partir da versão 17.9, o driver dá suporte ao OpenSSL 3.0, além das versões anteriores. Quando múltiplas versões do OpenSSL estão presentes, o driver tenta carregar uma versão suportada a partir de seus caminhos de pesquisa de biblioteca.
| Versão do driver | Suporte às versões do OpenSSL |
|---|---|
| 17,4 a 17,8 | 1.0, 1.1 |
| versões 17.9 e posteriores da série 17.x, e todas as versões do Driver 18 | 1.0, 1.1, 3.0 |
OpenSSL 4 não é suportado. No macOS, um link Homebrew openssl que aponta para o OpenSSL 4 pode impedir que o driver carregue o OpenSSL mesmo com o OpenSSL 3 instalado. Verifique o caminho da biblioteca, assim como as versões instaladas.
Observação
Um conflito potencial pode ocorrer se a aplicação que usa o driver, ou um de seus componentes, se vincular a ou carregar dinamicamente uma versão diferente do OpenSSL. Se várias versões do OpenSSL estiverem presentes no sistema e o aplicativo o usar, certifique-se de que a versão carregada pelo aplicativo e a do driver correspondam entre si. Os erros podem corromper a memória e podem não se manifestar de maneiras óbvias ou consistentes.
Linux alpino
Em musl, o tamanho padrão da pilha para novas threads é 128 KB, a menos que o executável solicite um valor padrão maior. Uma thread pode exceder esse limite quando chama o driver. Vincule um aplicativo ODBC no Alpine Linux com -Wl,-z,stack-size=<size_in_bytes> para solicitar uma pilha padrão de thread maior. Aplicações que criam threads com um tamanho de pilha explícito também devem escolher um tamanho adequado para essas threads.
A pilha da thread principal e a pilha padrão para novas threads não têm a mesma configuração. Em glibc sistemas, o padrão para novas threads normalmente segue o limite de recursos da pilha do processo, com uma alternativa específica da arquitetura quando esse limite é ilimitado. Não presuma um padrão fixo de 2 MB em sistemas Linux.
Observações adicionais
Para criar uma conexão dedicada de administrador (DAC) a partir de uma aplicação ODBC, defina Server=tcp:<server>,<dac_port> na sua cadeia de conexão. Use a porta descoberta do DAC, não a porta de conexão normal da instância. Por exemplo, se a porta DAC for 33000, defina Server=tcp:<server>,33000. Esses fragmentos de string de conexão especificam apenas o endpoint, não a autenticação. Configure a autenticação e a validação do certificado do servidor separadamente.
O login deve ser membro da função de servidor sysadmin. O acesso remoto exige que a opção de conexões de administrador remoto do servidor esteja ativada. Para requisitos de acesso, configuração do servidor e procedimentos de administração na linha de comando, veja Conexão de diagnóstico para administradores de banco de dados. Para descoberta de portas, veja porta DAC.
O gerenciador de drivers unixODBC lida com atributos de instruções passados por SQLSetConnectAttr da mesma forma que o Gerenciador de Drivers do Windows. As opções de instruções ODBC 2.x, como SQL_ATTR_QUERY_TIMEOUT e SQL_ATTR_MAX_ROWS, aplicam-se a instruções existentes e novas na conexão. Atributos apenas de instrução ODBC 3.x, como SQL_ATTR_ROW_ARRAY_SIZE e SQL_ATTR_PARAMSET_SIZE, retornam SQLSTATE HY092. Atributos definidos tanto no nível de conexão quanto na instrução, como SQL_ATTR_METADATA_ID, podem ser definidos em qualquer nível. Definir atributos apenas de instrução no nível de conexão está obsoleto no ODBC 3.x, então chame SQLSetStmtAttr em seu lugar. Para mais informações, veja a função SQLSetConnectAttr.
Em aplicações altamente multithread, a validação de identificadores unixODBC pode se tornar um gargalo de desempenho. Compilar unixODBC com --enable-fastvalidate pode melhorar o desempenho. No entanto, essa opção pode fazer com que aplicações que passam handles inválidos para APIs ODBC travem em vez de retornar SQL_INVALID_HANDLE.
Para etapas de instalação e configuração da plataforma, veja:
- Instale o driver ODBC no Linux.
- Instale o driver ODBC no macOS.
- Instale o gerenciador de drivers unixODBC.
- Configure strings de conexão e DSNs.
- Revise os requisitos do sistema.