Compartilhar via


Tradução automática de dados de caracteres

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics

Dados de caracteres, como variáveis de caracteres ANSI declaradas com SQL_C_CHAR ou dados armazenados no SQL Server usando os tipos de dados char, varchar ou text , podem representar apenas um número limitado de caracteres. Os dados de caractere armazenados que usam um byte por caractere podem representar apenas 256 caracteres. Os valores armazenados em variáveis SQL_C_CHAR são interpretados usando a ACP (página de código ANSI) do computador cliente. Os valores armazenados usando os tipos de dados char, varchar ou text no servidor são avaliados usando o ACP do servidor.

Se o servidor e o cliente tiverem o mesmo ACP, eles não terão problemas em interpretar os valores armazenados em objetos SQL_C_CHAR, char, varchar ou text . Se o servidor e o cliente tiverem ACPs diferentes, SQL_C_CHAR dados do cliente poderão ser interpretados como um caractere diferente no servidor se forem usados em colunas, variáveis ou parâmetros char, varchar ou text. Por exemplo, um byte de caractere contendo o valor 0xA5 é interpretado como o caractere Ñ em um computador usando a página de código 437 e é interpretado como o sinal de iene (¥) em um computador que executa a página de código 1252.

Dados de Unicode são armazenados usando dois bytes por caractere. Todos os caracteres estendidos são abordados pela especificação de Unicode. Dessa forma, todos os caracteres Unicode são interpretados da mesma maneira por todos os computadores.

O recurso AutoTranslate do driver ODBC do SQL Server Native Client tenta minimizar os problemas na movimentação de dados de caracteres entre um cliente e um servidor que têm páginas de código diferentes. O AutoTranslate pode ser definido na cadeia de conexão do SQLDriverConnect, na cadeia de caracteres de configuração do SQLConfigDataSource ou ao configurar fontes de dados para o driver ODBC do SQL Server Native Client usando o Administrador ODBC.

Quando a AutoTradução é definida como "não", nenhuma conversão é feita em dados movidos entre variáveis SQL_C_CHAR no cliente e colunas, variáveis ou parâmetros char, varchar ou text em um banco de dados SQL Server. Os padrões de bit poderão ser interpretados de forma diferente nos computadores cliente e servidor se os dados contiverem caracteres estendidos e os dois computadores tiverem páginas de código diferentes. Os dados serão interpretados da mesma maneira se ambos os computadores tiverem a mesma página de código.

Quando a Tradução Automática é definida como "yes", o driver ODBC do SQL Server Native Client usa Unicode para converter dados movidos entre variáveis SQL_C_CHAR no cliente e colunas, variáveis ou parâmetros char, varchar ou text em um banco de dados SQL Server:

  • Quando os dados são enviados de uma variável SQL_C_CHAR no cliente para uma coluna, variável ou parâmetro char, varchar ou text em um banco de dados SQL Server, o driver ODBC primeiro converte de SQL_C_CHAR para Unicode usando o ACP do cliente e, em seguida, de Unicode de volta para caractere usando o ACP do servidor.

  • Quando os dados são enviados de uma coluna, variável ou parâmetro char, varchar ou text em um banco de dados do SQL Server para uma variável SQL_C_CHAR no cliente, o driver ODBC do SQL Server Native Client primeiro converte de caractere para Unicode usando o ACP do servidor e, em seguida, de Unicode de volta para SQL_C_CHAR usando o ACP do cliente.

Como todas essas conversões são feitas pelo driver ODBC do SQL Server Native Client em execução no cliente, o ACP do servidor deve ser uma das páginas de código instaladas no computador cliente.

Fazer as conversões de caractere por Unicode assegura a conversão adequada de todos os caracteres que existem nas duas páginas de código. Se um caractere existir em uma página de código, mas não em outra, entretanto, o caractere não poderá ser representado na página de código de destino. Por exemplo, a página de código 1252 tem o símbolo de marca registrada (®), enquanto a página de código 437 não tem.

A configuração AutoTranslate não tem nenhum efeito sobre essas conversões:

  • Mover dados entre variáveis de caractere SQL_C_CHAR cliente e colunas, variáveis ou parâmetros Unicode nchar, nvarchar ou ntext em bancos de dados do SQL Server.

  • Mover dados entre Unicode SQL_C_WCHAR variáveis de cliente e caracteres, varchar ou colunas, variáveis ou parâmetros de texto em bancos de dados do SQL Server.

Os dados devem sempre ser convertidos quando movidos de caractere para Unicode.

Confira também

Processando resultados (ODBC)
Suporte a ordenações e a Unicode