Compartir por


Traducción automática de datos de caracteres

Se aplica a: SQL Server Azure SQL Database Azure SQL Instancia administrada Azure Synapse Analytics Analytics Platform System (PDW)

Los datos de caracteres, como las variables de caracteres ANSI declaradas con SQL_C_CHAR o los datos almacenados en SQL Server mediante los tipos de datos char, varchar o text , solo pueden representar un número limitado de caracteres. Los datos de caracteres almacenados que usan un byte por carácter solamente pueden representar 256 caracteres. Los valores almacenados en variables SQL_C_CHAR se interpretan utilizando la página de códigos ANSI (ACP) del equipo cliente. Los valores almacenados mediante tipos de datos char, varchar o text en el servidor se evalúan mediante el ACP del servidor.

Si tanto el servidor como el cliente tienen el mismo ACP, no tienen problemas para interpretar los valores almacenados en SQL_C_CHAR, char, varchar o objetos de texto . Si el servidor y el cliente tienen diferentes ACL, SQL_C_CHAR datos del cliente se pueden interpretar como un carácter diferente en el servidor si se usa en columnas, variables o parámetros char, varchar o text. Por ejemplo, un byte de caracteres que contiene el valor 0xA5 se interpreta como el carácter Ñ en un equipo con la página de códigos 437 y se interpreta como el signo yen (**) en un equipo que ejecuta la página de códigos 1252.

Los datos Unicode se almacenan utilizando dos bytes por carácter. Todos los caracteres extendidos quedan cubiertos por la especificación Unicode, de modo que todos los caracteres Unicode son interpretados de igual manera por todos los equipos.

La característica AutoTranslate del controlador ODBC de SQL Server Native Client intenta minimizar los problemas al mover datos de caracteres entre un cliente y un servidor que tienen páginas de códigos diferentes. AutoTranslate se puede establecer en la cadena de conexión de SQLDriverConnect, en la cadena de configuración de SQLConfigDataSource o al configurar orígenes de datos para el controlador ODBC de SQL Server Native Client mediante el administrador odbc.

Cuando AutoTranslate se establece en "no", no se realizan conversiones en los datos movidos entre SQL_C_CHAR variables en el cliente y char, varchar o columnas de texto , variables o parámetros de una base de datos de SQL Server. Los modelos de bits se pueden interpretar de manera diferente en los equipos cliente y servidor si los datos contienen caracteres extendidos y los dos equipos tienen páginas de códigos diferentes. Los datos se interpretarán del mismo modo si ambos equipos tienen la misma página de códigos.

Cuando AutoTranslate se establece en "sí", el controlador ODBC de SQL Server Native Client usa Unicode para convertir los datos movidos entre variables de SQL_C_CHAR en el cliente y char, varchar o columnas de texto , variables o parámetros en una base de datos de SQL Server:

  • Cuando los datos se envían desde una variable de SQL_C_CHAR en el cliente a una columna char, varchar o de texto, variable o parámetro en una base de datos de SQL Server, el controlador ODBC convierte primero de SQL_C_CHAR a Unicode mediante el ACP del cliente y, a continuación, de Unicode a carácter mediante el ACP del servidor.

  • Cuando los datos se envían desde una columna char, varchar o de texto , variable o parámetro de una base de datos de SQL Server a una variable de SQL_C_CHAR en el cliente, el controlador ODBC de SQL Server Native Client convierte primero de carácter a Unicode mediante el ACP del servidor y, a continuación, de Unicode a SQL_C_CHAR mediante el ACP del cliente.

Dado que todas estas conversiones se realizan mediante el controlador ODBC de SQL Server Native Client que se ejecuta en el cliente, el ACP del servidor debe ser una de las páginas de códigos instaladas en el equipo cliente.

Al realizar las conversiones de caracteres mediante Unicode, se asegura la conversión correcta de todos los caracteres que existen en ambas páginas de códigos. Si un carácter existe en una página de códigos pero no en otra, el carácter no se podrá representar en la página de códigos de destino. Por ejemplo, la página de códigos 1252 tiene el símbolo de marca registrada (®), mientras que la página de códigos 437 no lo tiene.

El valor AutoTranslate no tiene ningún efecto en estas conversiones:

  • Mover datos entre las variables de cliente SQL_C_CHAR caracteres y las columnas nchar, nvarchar o ntext de Unicode, las variables o los parámetros de las bases de datos de SQL Server.

  • Mover datos entre Unicode SQL_C_WCHAR variables de cliente y caracteres char, varchar o columnas de texto , variables o parámetros en bases de datos de SQL Server.

Los datos siempre se deben convertir cuando se pasan de caracteres a Unicode.

Consulte también

Procesar resultados (ODBC)
Compatibilidad con la intercalación y Unicode