Compartir a través de


Traducción automática de datos de caracteres

Los datos de caracteres, como las variables de caracteres ANSI declaradas con SQL_C_CHAR o los datos almacenados en SQL Server que usan los tipos de datos char, varchar o text, sólo pueden representar un número limitado de caracteres. Los datos de caracteres almacenados que usan un byte por carácter sólo 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 que usan los tipos de datos char, varchar o text en el servidor se evalúan utilizando la ACP del servidor.

Si el servidor y el cliente tienen la misma ACP, no tendrán ningún problema para interpretar los valores almacenados en objetos char, varchar o text de SQL_C_CHAR. Si el servidor y el cliente tienen ACP diferentes, los datos SQL_C_CHAR del cliente se pueden interpretar como un carácter diferente en el servidor si se utilizan en columnas, variables o parámetros char, varchar o text. Por ejemplo, un byte de caracteres que contenga el valor 0xA5 se interpretará como el carácter Ñ en un equipo que utilice la página de códigos 437, y se interpretará como el signo del yen (¥) en un equipo en el que se ejecute 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 derivados de mover datos de caracteres entre un cliente y un servidor que tengan 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 utilizando el Administrador de ODBC.

Si AutoTranslate está establecido en "no", no se realiza ninguna conversión en los datos movidos entre las variables SQL_C_CHAR del cliente y las columnas, variables o parámetros char, varchar o text 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.

Si AutoTranslate está establecido en "sí", el controlador ODBC de SQL Server Native Client utiliza Unicode para convertir los datos movidos entre las variables SQL_C_CHAR del cliente y las columnas, variables o parámetros char, varchar o text de una base de datos de SQL Server:

  • Cuando se envían datos de una variable SQL_C_CHAR del cliente a una columna, variable o parámetro char, varchar o text de una base de datos de SQL Server, el controlador ODBC realiza primero la conversión de SQL_C_CHAR a Unicode utilizando la ACP del cliente y, después, otra vez de Unicode a caracteres utilizando la ACP del servidor.

  • Cuando se envían datos de una columna, variable o parámetro char, varchar o text de una base de datos de SQL Server a una variable SQL_C_CHAR del cliente, el controlador ODBC de SQL Server Native Client realiza primero la conversión de caracteres a Unicode utilizando la ACP del servidor y, después, otra vez de Unicode a SQL_C_CHAR utilizando la ACP del cliente.

Como todas estas conversiones son realizadas por el controlador ODBC de SQL Server Native Client que se ejecuta en el cliente, la 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 variables SQL_C_CHAR de caracteres del cliente y columnas, variables o parámetros nchar, nvarchar o ntext de Unicode de bases de datos de SQL Server.

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

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