Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo descreve considerações de programação para aplicações que utilizam o Microsoft ODBC Driver for SQL Server em Linux ou macOS. Alguns links apontam para material do SQL Server Native Client. Estas páginas fornecem contexto histórico da API.
Escolha uma versão do driver
Use o Microsoft ODBC Driver 18 para SQL Server, a linha de drivers atual, para novos desenvolvimentos. O Microsoft ODBC Driver 17 para SQL Server continua suportado para aplicações que já o implementam, conforme descrito no ciclo de vida do suporte. O ODBC Driver 13, que foi incluído com o SQL Server 2017, é elegível para suporte alargado até 12 de outubro de 2027, apenas ao abrigo de um acordo de suporte alargado.
Especifique o nome do driver instalado na sua cadeia de ligação, colocado entre chavetas:
Driver={ODBC Driver 18 for SQL Server}
Driver={ODBC Driver 17 for SQL Server}
Num nome de fonte de dados (DSN) em odbc.ini, use o nome sem chavetas, por exemplo Driver = ODBC Driver 18 for SQL Server. Para a sintaxe DSN, veja Palavras-chave de cadeia de ligação e nomes de fontes de dados (DSNs).
Para definições de ligação específicas da versão, veja Diferenças principais de versão. Para datas de suporte e compatibilidade do sistema operativo, consulte o ciclo de vida do suporte e os requisitos do sistema.
Criar uma aplicação
Para a localização dos ficheiros de cabeçalho, incluindo ordem, comandos do compilador, nomes de bibliotecas e um exemplo de C++, consulte Desenvolver aplicações C e C++ com o controlador ODBC e Ligar e consultar com C++ e ODBC.
Uma aplicação ODBC pode usar Múltiplos Conjuntos de Resultados Ativos (MARS) e outras funcionalidades específicas do SQL Server, incluindo msodbcsql.h após os cabeçalhos unixODBC (sql.h, sqlext.h, sqltypes.h, e sqlucode.h). Utilize os mesmos nomes simbólicos para itens específicos do SQL Server que utiliza nas aplicações ODBC do Windows.
Localizar capacidades do controlador
Comece com a Referência do Programador ODBC para a interface padrão de programação de aplicações (API). Depois usa a documentação atual do driver para o comportamento específico do driver.
A visão geral do Microsoft ODBC Driver for SQL Server remete 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 em Linux e macOS:
- Comunicação com o SQL Server (ODBC)
- Suporte para tempo limite de conexão e consulta
- Cursors
- Melhorias de data/hora (ODBC)
- Executar consultas (ODBC)
- Tratamento de erros e mensagens
- Autenticação por Kerberos
- Grandes tipos definidos pelo utilizador do Common Language Runtime (CLR) (ODBC)
- Efetuar transações (ODBC). Para transações distribuídas em Linux e macOS, use transações XA com DTC.
- Resultados de processamento (ODBC)
- Executar procedimentos armazenados
- Suporte de colunas esparsas (ODBC)
- Utilização de encriptação sem validação
- Parâmetros com valores de tabela
- UTF-8 e UTF-16 para a API de comandos e dados
- Utilização de funções de catálogo
Limitations
As seguintes funcionalidades não foram verificadas para funcionar corretamente no driver ODBC em Linux e macOS:
- Ligação ao cluster de failover.
- Resolução IP de Rede Transparente antes do Driver ODBC 17.
- Rastreamento de Built-In Diagnostics (BID) do Driver ODBC para Linux e macOS antes do Driver ODBC 17.3.
Funcionalidades não suportadas
As seguintes funcionalidades não estão disponíveis no driver ODBC no Linux e macOS:
Transações distribuídas através do atributo
SQL_ATTR_ENLIST_IN_DTC. O driver suporta transações XA através do Coordenador de Transações Distribuídas da Microsoft (DTC). Para mais informações, consulte Usar transações XA com DTC.Espelhamento de banco de dados.
FILESTREAM.
Perfilamento do desempenho do driver ODBC, abordado em SQLSetConnectAttr, e estes atributos de ligação relacionados com o 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 Descriptores de Tipo de Dados.O
SQL_CUR_USE_ODBCvalor do atributoSQL_ATTR_ODBC_CURSORSdeSQLSetConnectAttr.
Processar dados de caracteres
No Linux e macOS, use buffers UTF-16 SQLWCHAR com APIs ODBC de caracteres largos 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, deve usar UTF-8 para dados SQLCHAR. Estas versões não suportam outras codificações.
A partir do Driver ODBC 17, conjuntos de caracteres e codificações suportados para SQLCHAR dados incluem:
Observação
Devido a iconv diferenças entre musl e glibc, muitas destas localizações não são suportadas no Alpine Linux. Para mais informações, veja Diferenças funcionais em relação ao glibc.
| Nome | Description |
|---|---|
| UTF-8 | Unicode |
| CP437 | MS-DOS Latino-EUA |
| CP850 | MS-DOS Latim 1 |
| CP874 | Latim/Tailandês |
| CP932 | Japonês (página de códigos do Windows 932) |
| CP936 | Chinês simplificado, GBK |
| CP949 | Coreano (página de códigos do Windows 949) |
| CP950 | Chinês Tradicional, Big5 |
| CP1250 | Centro-Europeu |
| CP1251 | Cirílico |
| CP1252 | Europa Ocidental |
| CP1253 | Grego |
| CP1254 | Turco (língua) |
| CP1255 | Hebraico |
| CP1256 | Árabe |
| CP1257 | Báltico |
| CP1258 | Vietnamita |
| ISO-8859-1 | Latin-1 |
| ISO-8859-2 | Latin-2 |
| ISO-8859-3 | Latin-3 |
| ISO-8859-4 | Latin-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 (língua) |
| ISO-8859-13 | Latin-7 |
| ISO-8859-15 | Latin-9 |
Quando se liga, o driver deteta a configuração regional atual do processo em que está carregado. Se a configuração regional usar uma das codificações listadas, o driver usa essa codificação para dados de SQLCHAR (caracteres estreitos). Caso contrário, por defeito é UTF-8. Os processos iniciam-se na C locale por predefinição, o que faz com que o driver passe automaticamente para UTF-8. Se uma aplicação precisar de uma das codificações listadas, chame setlocale antes de estabelecer ligação. Especifique explicitamente a configuração regional, ou use uma cadeia vazia (por exemplo, setlocale(LC_ALL, "")) para usar as definições de configuração regional do ambiente.
Num ambiente típico Linux ou macOS onde a codificação é UTF-8, os utilizadores do ODBC Driver 17 que atualizam a partir do 13 ou 13.1 não notarão diferenças. Aplicações que utilizam uma codificação setlocale listada que não seja UTF-8 precisam de usar essa codificação para dados de e para o driver em vez de UTF-8.
Tens de usar UTF-16LE (little endian) para dados SQLWCHAR.
Quando atribui parâmetros de entrada usando SQLBindParameter, se especificar um tipo SQL de caracteres estreitos 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 os parâmetros de saída, o driver converte da codificação especificada nas informações de ordenação associadas aos dados para a codificação do cliente. Caracteres na codificação de origem que não são representáveis na codificação de destino convertem-se num ponto de interrogação (?).
Para evitar esta perda de dados ao atribuir parâmetros de entrada, especifique um tipo de carácter 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 deve também 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. Para parâmetros de saída, especifique um tipo SQL Unicode e ou um tipo C Unicode (SQL_C_WCHAR), que faz com que o driver devolva dados como UTF-16, ou um tipo C restrito com uma codificação cliente que possa representar os dados fonte. O UTF-8 pode sempre representar estes dados.
Para mais informações sobre colações e codificações, consulte Agrupamento e suporte Unicode.
Existem diferenças de conversão entre versões do Windows e Linux ou macOSiconv:
- Para a página de código 1255, o 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 descodificação de caracteres não definidos na norma de codificação difere. Por exemplo, byte
0x80converte-se em U+0080 no Windows e pode tornar-se U+30FB no Linux e macOS, dependendo daiconvversão.
No ODBC Driver 13 e 13.1, dividir caracteres multibyte UTF-8 ou pares substitutos UTF-16 entre SQLPutData buffers resulta em corrupção de dados. Utilize buffers de streaming que não terminem em codificações parciais de caracteres. Esta limitação foi removida no Driver 17 do ODBC.
Para orientações sobre codificação de caracteres, conversão, associação de parâmetros e dimensionamento do buffer, veja Problemas conhecidos.
OpenSSL
A partir do ODBC Driver 17.4, o driver carrega o OpenSSL dinamicamente, o que lhe permite correr em sistemas com versões 1.0 ou 1.1 sem ficheiros de driver separados. A partir da versão 17.9, o driver suporta OpenSSL 3.0 além das versões anteriores. Quando existem várias versões do OpenSSL, o driver tenta carregar uma versão suportada a partir dos seus caminhos de pesquisa de biblioteca.
| Versão do controlador | Versões OpenSSL suportadas |
|---|---|
| 17.4 a 17.8 | 1.0, 1.1 |
| versões 17.x a partir da 17.9 e posteriores, e todas as versões do Driver 18 | 1.0, 1.1, 3.0 |
O OpenSSL 4 não é suportado. No macOS, um link Homebrew openssl que aponta para o OpenSSL 4 pode impedir o driver de carregar o OpenSSL mesmo quando o OpenSSL 3 está instalado. Verifica o caminho da biblioteca, bem como as versões instaladas.
Observação
Pode ocorrer um conflito potencial se a aplicação que utiliza o driver, ou um dos seus componentes, se ligar ou carregar dinamicamente uma versão diferente do OpenSSL. Se várias versões do OpenSSL estiverem presentes no sistema e a aplicação o utilizar, certifique-se de que a versão carregada pela aplicação e o driver coincidem. Os erros podem corromper a memória e podem não manifestar-se de forma óbvia ou consistente.
Linux alpino
O tamanho padrão da pilha para novos threads em musl é de 128 KB, a menos que o executável solicite um tamanho de pilha predefinido maior. Um thread pode ultrapassar este limite quando chama o driver. Ligue uma aplicação ODBC em Alpine Linux com -Wl,-z,stack-size=<size_in_bytes> para pedir uma stack de threads padrão 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 stack padrão para as novas threads não têm a mesma definição. Nos glibc sistemas, o padrão para novos threads normalmente segue o limite de recursos da pilha do processo, com uma alternativa predefinida específica da arquitetura quando esse limite é ilimitado. Não assumas um valor predefinido fixo de 2 MB em sistemas Linux.
Notas adicionais
Para estabelecer uma ligação de administrador dedicada (DAC) a partir de uma aplicação ODBC, defina Server=tcp:<server>,<dac_port> na sua cadeia de ligação. Utilize a porta DAC descoberta, não a porta de ligação normal da instância. Por exemplo, se a porta DAC for 33000, defina Server=tcp:<server>,33000. Estes fragmentos de cadeia de ligação à base de dados especificam apenas o ponto final, não a autenticação. Configure a autenticação e a validação do certificado do servidor separadamente.
O login deve ser um membro da sysadmin server role. O acesso remoto requer que a opção de ligação de administrador remoto do servidor esteja ativada. Para requisitos de acesso, configuração do servidor e procedimentos de administração na linha de comandos, veja Conexão de diagnóstico para administradores de bases de dados. Para descoberta de portas, veja porta DAC.
O gestor de drivers unixODBC gere os atributos de instrução passados SQLSetConnectAttr da mesma forma que o Windows Driver Manager. 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 ligação. Atributos apenas de instruções ODBC 3.x, como SQL_ATTR_ROW_ARRAY_SIZE e SQL_ATTR_PARAMSET_SIZE, retornam SQLSTATE HY092. Atributos definidos tanto ao nível de ligação como de instrução, como SQL_ATTR_METADATA_ID, podem ser definidos em qualquer um dos níveis. Definir atributos apenas de instrução ao nível da ligação está obsoleto no ODBC 3.x, por isso, chame SQLSetStmtAttr em vez disso. Para mais informações, consulte a função SQLSetConnectAttr.
Em aplicações altamente multithread, a validação de handle unixODBC pode tornar-se um gargalo de desempenho. Compilar unixODBC com --enable-fastvalidate pode melhorar o desempenho. No entanto, esta opção pode fazer com que aplicações que passam handles inválidos para APIs ODBC crashem em vez de devolver SQL_INVALID_HANDLE.
Para os passos de instalação e configuração da plataforma, veja:
- Instala o driver ODBC no Linux.
- Instala o driver ODBC no macOS.
- Instala o gestor de drivers unixODBC.
- Configurar cadeias de conexão e DSNs.
- Reveja os requisitos do sistema.