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.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Base de dados SQL no Microsoft Fabric
O Microsoft OLE DB Driver for SQL Server (versão 18.2.1) adiciona suporte para a codificação de servidores UTF-8. Para informações sobre o suporte ao SQL Server UTF-8, veja:
A versão 18.4.0 do driver adiciona suporte para a codificação cliente UTF-8 (ativada com a caixa "Use Unicode UTF-8 para suporte a línguas mundiais" nas Definições de Região no Windows 10 e Windows 11).
Observação
O Microsoft OLE DB Driver para SQL Server utiliza a função GetACP para determinar a codificação do buffer de entrada DBTYPE_STR.
Cenários em que o GetACP devolve uma codificação UTF-8 (ativada com a caixa "Usar Unicode UTF-8 para suporte a línguas mundiais" em Definições de Região no Windows 10 e Windows 11) são suportados a partir da versão 18.4. Em versões anteriores, se o buffer precisar armazenar dados Unicode, o tipo de dado do buffer deve ser definido para DBTYPE_WSTR (codificado UTF-16).
Inserção de dados numa coluna CHAR ou VARCHAR codificada em UTF-8
Ao criar um buffer de parâmetros de entrada para inserção, o buffer é descrito usando um array de estruturas DBBINDING. Cada estrutura DBBINDING associa um único parâmetro ao buffer do consumidor e contém informações como o comprimento e o tipo do valor dos dados. Para um buffer de parâmetros de entrada do tipo CHAR, o wType da estrutura DBBINDING deve ser definido como DBTYPE_STR. Para um buffer de parâmetros de entrada do tipo WCHAR, o wType da estrutura DBBINDING deve ser definido para DBTYPE_WSTR.
Ao executar um comando com parâmetros, o driver constrói a informação do tipo de dados dos parâmetros. Se o tipo de buffer de entrada e o tipo de dados do parâmetro coincidirem, não é feita nenhuma conversão no driver. Caso contrário, o driver converte o buffer de parâmetros de entrada para o tipo de dados do parâmetro. O tipo de dado do parâmetro pode ser definido explicitamente pelo utilizador chamando ICommandWithParameters::SetParameterInfo. Se a informação não for fornecida, o driver deriva a informação do tipo de dados do parâmetro (a) recuperando metadados da coluna do servidor quando a instrução está preparada, ou (b) tentando uma conversão padrão a partir do tipo de dados do parâmetro de entrada.
O buffer de parâmetros de entrada pode ser convertido para a intercalação da coluna do servidor pelo driver ou pelo servidor, dependendo dos tipos de dados do buffer de entrada e do parâmetro. Durante a conversão, pode ocorrer perda de dados se a página de código do cliente ou a página de código de colação da base de dados não conseguirem representar todos os caracteres no buffer de entrada. A tabela seguinte descreve o processo de conversão ao inserir dados numa coluna habilitada por UTF-8:
| Tipo de dados do buffer | Tipo de dados do parâmetro | Conversion | Precaução do utilizador |
|---|---|---|---|
| DBTYPE_STR | DBTYPE_STR | Conversão de servidor da página de códigos do cliente para a página de códigos de colação da base de dados; conversão de servidor da página de códigos de colação da base de dados para a página de códigos de colação de colunas. | Assegure que a página de código do cliente e a página de código de ordenação da base de dados possam representar todos os caracteres nos dados de entrada. Por exemplo, para inserir um caractere polaco, a página de códigos do cliente pode ser definida para 1250 (ANSI Central European), e a colação da base de dados pode usar o polaco como designador de colação (por exemplo, Polish_100_CI_AS_SC) ou ser compatível com UTF-8. |
| DBTYPE_STR | DBTYPE_WSTR | Conversão de driver da página de códigos do cliente para codificação UTF-16; conversão de servidor da codificação UTF-16 para a página de código de colação de colunas. | Assegure que a página de código do cliente pode representar todos os caracteres nos dados de entrada. Por exemplo, para inserir um carácter polaco, a página de código do cliente podia ser definida para 1250 (ANSI Central European). |
| DBTYPE_WSTR | DBTYPE_STR | Conversão de drivers da codificação UTF-16 para a página de códigos de colação da base de dados; conversão de servidor da página de códigos de colação da base de dados para a página de códigos de colação de colunas. | Assegure que a página de códigos de compilação da base de dados pode representar todos os caracteres nos dados de entrada. Por exemplo, para inserir um caractere polaco, a página de código de agrupamento da base de dados pode usar o polaco como designador de agrupamento (por exemplo, Polish_100_CI_AS_SC) ou ter suporte a UTF-8. |
| DBTYPE_WSTR | DBTYPE_WSTR | Conversão de servidor de UTF-16 para página de código de colação de colunas. | Nenhum. |
Recuperação de dados de uma coluna CHAR ou VARCHAR codificada em UTF-8
Ao criar um buffer para os dados recuperados, o buffer é descrito usando um array de estruturas DBBINDING. Cada estrutura DBBINDING associa uma única coluna na linha recuperada. Para recuperar os dados da coluna como CHAR, defina o wType da estrutura DBBINDING para DBTYPE_STR. Para recuperar os dados da coluna como WCHAR, defina o wType da estrutura DBBINDING para DBTYPE_WSTR.
Para o indicador de tipo de buffer de resultados DBTYPE_STR, o driver converte os dados codificados em UTF-8 para a codificação do cliente. O utilizador deve garantir que a codificação do cliente pode representar os dados da coluna UTF-8, caso contrário, pode ocorrer perda de dados.
Para o indicador de tipo de buffer de resultado DBTYPE_WSTR, o driver converte os dados codificados em UTF-8 para a codificação UTF-16.
Comunicação com servidores que não suportam UTF-8
O Microsoft OLE DB Driver para SQL Server garante que os dados são expostos ao servidor de uma forma que este possa compreender. Ao inserir dados de clientes habilitados por UTF-8, o driver traduz as strings codificadas em UTF-8 para a página de código de compilação da base de dados antes de as enviar para o servidor.
Observação
A utilização da interface ISequentialStream para inserir dados codificados em UTF-8 numa coluna de texto legada está limitada apenas a servidores que suportam UTF-8. Para mais detalhes, veja BLOBs e Objetos OLE.
Ver também
Driver OLE DB para Funcionalidades do SQL Server
Suporte a UTF-16 no Driver OLE DB para SQL Server