Share via


Tradução automática de dados de caracteres

Dados de caracteres, como variáveis de caracteres ANSI declarados com SQL_C_CHAR ou dados armazenados no SQL Server que usem 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 com a ACP do servidor.

Se o servidor e o cliente tiverem a mesma ACP, eles não terão problemas na interpretação dos valores armazenados nos objetos SQL_C_CHAR, char, varchar ou text. Se o servidor e o cliente tiverem ACPs diferentes, os dados de SQL_C_CHAR 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 que usa a página de código 437 e como o símbolo do 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 SQL Server Native Client tenta minimizar os problemas na movimentação de dados de caracteres entre um cliente e um servidor que tenha páginas de código diferentes. AutoTranslate pode ser definido na cadeia de caracteres de conexão de SQLDriverConnect, na cadeia de caracteres de configuração de SQLConfigDataSource ou ao configurar fontes de dados para o driver ODBC SQL Server Native Client que use Administrador ODBC.

Quando AutoTranslate está definido como "no", nenhuma conversão é feita nos dados movidos entre as variáveis SQL_C_CHAR no cliente e as colunas, as variáveis ou os parâmetros char, varchar ou text em um banco de dados do 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 AutoTranslate está definido como "yes", o driver ODBC SQL Server Native Client usa Unicode para converter os dados movidos entre as variáveis SQL_C_CHAR no cliente e as colunas, as variáveis ou os parâmetros char, varchar ou text em um banco de dados do SQL Server:

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

  • Quando os dados são enviados de uma coluna, uma variável ou um 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 SQL Server Native Client primeiro é convertido de caractere em Unicode usando a ACP do servidor e, em seguida, de Unicode novamente em SQL_C_CHAR usando a ACP do cliente.

Como todas essas conversões são feitas pelo driver ODBC SQL Server Native Client em execução no cliente, a 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:

  • A movimentação de dados entre variáveis de cliente do SQL_C_CHAR de caractere e colunas, variáveis ou parâmetros nchar, nvarchar ou ntext em bancos de dados do SQL Server.

  • A movimentação de dados entre variáveis de cliente SQL_C_WCHAR de Unicode e colunas, variáveis ou parâmetros char, varchar ou text de caractere em bancos de dados do SQL Server.

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