Partilhar via


Suporte UTF-8 no driver OLE DB para SQL Server

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Base de dados SQL no Microsoft Fabric

Baixar driver OLE DB

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