Algunas aplicaciones (especialmente aquellas que están basado en Web) deben tratar con datos Unicode que está codificados con el método de codificación UTF-8. SQL Server 7.0 y SQL Server 2000 utilicen una codificación de Unicode diferentes (UCS-2) y no reconocen UTF-8 como datos de carácter válido. Este artículo describen algunas opciones para tratar esta situación.
Datos Unicode pueden codificarse de muchas maneras diferentes. UCS-2 y UTF-8 son dos formas comunes de almacenar modelos de bits que representan caracteres Unicode. Microsoft Windows NT, SQL Server, Java, COM y el controlador ODBC de SQL Server y proveedor OLEDB de todo internamente representan datos Unicode como UCS-2.
Las opciones para utilizar SQL Server 7.0 o SQL Server 2000 como un servidor back-end de una aplicación que envía y recibe datos de Unicode se codifican como UTF-8 incluyen:
- Si la aplicación utiliza páginas Active Server (ASP) y está utilizando Internet Information Server (IIS) 5.0 y Microsoft Windows 2000, puede agregar "< % Session.Codepage=65001 % >" a la secuencia de comandos de servidor ASP. Esto indica a IIS para convertir todas las cadenas generadas dinámicamente (ejemplo: Response.Write) desde UCS-2 en UTF-8 automáticamente antes de enviarlos al cliente.
Si desea habilitar las sesiones, también puede utilizar la directiva de servidor "< % @ CodePage = % 65001 >".
Los datos de UTF-8 enviados desde el cliente al servidor a través de GET o POST también se convierten automáticamente en UCS-2. La propiedad Session.Codepage es el método recomendado para controlar datos de UTF-8 dentro de una aplicación web. Esta configuración de página de códigos no está disponible en IIS 4.0 y Windows NT 4.0. Para obtener información adicional, consulte el siguiente artículo de Microsoft Knowledge Base: 254313
(http://support.microsoft.com/kb/254313/EN-US/
)
Error: Error de páginas de Active Server 'ASP 0203' código no válido
- Traducir a y desde UCS-2 o UTF-8, según corresponda dentro de la aplicación. Código de ejemplo para este tipo de conversión se encuentra en el sitio del Consorcio Unicode:
Puede encontrar una descripción del algoritmo para convertir UCS-2 en UTF-8 de alto nivel en el documento Request For Comments Internet RFC2279.
En Windows NT o Windows 2000, puede utilizar las funciones de Win32 MultiByteToWideChar y WideCharToMultiByte para convertir UTF-8 a y desde UCS-2, pasando la constante CP_UTF8 (65001) como primer parámetro a las funciones. - Modifique la aplicación utilizar UCS-2 en lugar de codificación UTF-8.
- Almacenar los datos reales de UTF-8 en el servidor utilizando las columnas BINARY o VARBINARY o IMAGE. Almacenar datos de UTF-8 en SQL Server significa que no se puede utilizar SQL Server para ordenar o buscar intervalos de estos valores como si los datos fueran de los datos de carácter válido. Los tipos de operaciones en las columnas que contienen datos UTF-8 que devolvería resultados esperados incluyen "ORDER BY", mayor - de ">"menor - que"<" comparaciones y las funciones de manipulación de cadena de SQL Server integradas como SUBSTRING().
Sin embargo, las comparaciones de igualdad, funcionará siempre que las cadenas comparadas sean equivalentes en un nivel de byte. Tenga en cuenta que si almacena datos UTF-8 en SQL Server no debe utilizar columnas de caracteres (CHAR, NCHAR/VARCHAR etc.). UTF-8 no es un carácter válido datos a SQL Server y almacenando datos de carácter no en columnas de carácter que corre el riesgo de problemas como los problemas tratados en los siguientes artículos de Microsoft Knowledge Base: 155723
(http://support.microsoft.com/kb/155723/EN-US/
)
INF: SQL Server truncamiento de una cadena DBCS
234748
(http://support.microsoft.com/kb/234748/EN-US/
)
PRB: Controlador ODBC de SQL Server convierte sucesos de lenguaje a Unicode
Si está pensando en esta opción, tenga en cuenta que si alguna vez necesita tener acceso a datos UTF-8 almacenados dentro de cualquier aplicación distinta de un explorador Web (por ejemplo, desde una aplicación de ODBC no basada en Web) necesitará realizar una conversión de UTF-8 a UCS-2 de esta aplicación como ODBC, OLEDB, COM, llamadas a la API Win32, VB y tiempo de ejecución de C no funciona con datos UTF-8 de manipulación de cadena. Esto mueve la carga de traducción a una aplicación diferente. - Si los requisitos no incluyen la necesidad de almacenar datos de una combinación de idiomas que no puede satisfacer una página de código único, no deberá utilizar Unicode.
Se introdujo la compatibilidad con Unicode a partir de SQL Server 7.0 de SQL Server. Puesto que SQL Server 6.5 no admite el almacenamiento de datos Unicode, las únicas opciones para SQL Server 6.5 se describen en los pasos 4 y 5.
Id. de artículo: 232580 - Última revisión: miércoles, 07 de diciembre de 2005 - Versión: 4.4
La información de este artículo se refiere a:
- Microsoft SQL Server 2000 Standard Edition
- Microsoft SQL Server 6.5 Standard Edition
- Microsoft SQL Server 7.0 Standard Edition
- Microsoft SQL Server 2005 Standard Edition
- Microsoft SQL Server 2005 Express Edition
- Microsoft SQL Server 2005 Developer Edition
- Microsoft SQL Server 2005 Enterprise Edition
- Microsoft SQL Server 2005 Workgroup Edition
| kbmt kbinfo KB232580 KbMtes |
Traducción automáticaIMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés):
232580
(http://support.microsoft.com/kb/232580/en-us/
)