Intercalación y terminología internacional
Las intercalaciones de SQL Server proporcionan propiedades de distinción entre mayúsculas y minúsculas, acentos y reglas de ordenación para los datos. Las intercalaciones que se utilizan con tipos de datos de caracteres como char y varchar dictan la página de códigos y los caracteres correspondientes que se pueden representar para ese tipo de datos. Si va a instalar una instancia nueva de SQL Server, restaurar una copia de seguridad de la base de datos o conectar el servidor a las bases de datos cliente, es importante conocer los requisitos de configuración regional, el criterio de ordenación y la distinción entre mayúsculas y minúsculas y acentos de los datos con los que se va a trabajar.
Al seleccionar una intercalación para un servidor, base de datos, columna o expresión, se están asignando ciertas características a los datos que afectarán a los resultados de muchas operaciones de la base de datos. Por ejemplo, cuando se crea una consulta con ORDER BY, el criterio de ordenación del conjunto de resultados puede depender de la intercalación que se aplica a la base de datos o que se dicta en una cláusula COLLATE en el nivel de expresión de la consulta.
Una intercalación puede contener alguna o todas las características siguientes:
Distinción de mayúsculas y minúsculas
Distinción de acentos
Distinción de Kana
Distinción de ancho
Para hacer el mejor uso posible de la compatibilidad con la intercalación en SQL Server, se deben conocer los términos que se definen en este tema y cómo se relacionan con las características de los datos.
Términos
Intercalación
Configuración regional
Unicode
Página de códigos
Tipos de datos
Criterio de ordenación
Intercalación
Una intercalación especifica los patrones de bits que representan a cada carácter de un conjunto de datos. Las intercalaciones también determinan las reglas que permiten ordenar y comparar los datos. SQL Server permite almacenar los objetos con intercalaciones diferentes en una sola base de datos. En las columnas que no sean Unicode, la configuración de intercalación especifica la página de códigos de los datos y qué caracteres se pueden representar. Los datos que se mueven entre columnas que no sean Unicode se deben convertir de la página de códigos de origen a la página de códigos de destino.
Los resultados de las instrucciones de Transact-SQL pueden variar cuando se ejecutan en el contexto de bases de datos distintas que tengan una configuración de intercalación diferente. Si es posible, utilice una intercalación normalizada para su organización. De esta manera no tiene que especificar explícitamente la intercalación en cada carácter o expresión Unicode. Si debe trabajar con objetos que tienen configuraciones de intercalación y de página de códigos diferentes, conviene codificar las consultas para tener en cuenta las reglas de prioridad de intercalación. Para obtener más información, vea Prioridad de intercalación (Transact-SQL).
Las características de una intercalación son la distinción de idioma, de mayúsculas y minúsculas, de acentos, de Kana y de ancho.
Las intercalaciones de SQL Server incluyen los conjuntos de intercalaciones siguientes:
Intercalaciones de Windows
Las intercalaciones de Windows definen reglas para almacenar los datos de caracteres que se basan en una configuración regional del sistema Windows asociada. En una intercalación de Windows, la comparación de datos no Unicode se implementa con el mismo algoritmo que la de los datos Unicode. Las reglas de intercalación básicas de Windows especifican qué alfabeto o idioma se utilizan cuando se aplica un orden de diccionario, y la página de códigos que se usa para almacenar los datos de caracteres que no son Unicode. Tanto la ordenación Unicode y como la ordenación no Unicode son compatibles con comparaciones de cadenas de una determinada versión de Windows. De este modo se proporciona coherencia entre los tipos de datos de SQL Server y también se ofrece a los programadores la posibilidad de ordenar las cadenas de sus aplicaciones usando las mismas reglas que usa SQL Server. Para obtener más información, vea Configuración de intercalación en el programa de instalación.Intercalaciones binarias
Las intercalaciones binarias ordenan los datos según la secuencia de valores codificados definidos por la configuración regional y el tipo de datos. Distinguen entre mayúsculas y minúsculas. Una intercalación binaria de SQL Server define la configuración regional y la página de códigos ANSI que se van a usar. Esto exige un criterio de ordenación binario. Dado que son relativamente simples, las intercalaciones binarias ayudan a mejorar el rendimiento de la aplicación. En los tipos de datos no Unicode, las comparaciones de datos se basan en los puntos de código que se definen en la página de códigos ANSI. En tipos de datos Unicode, las comparaciones de datos dependen de los puntos de código Unicode. En intercalaciones binarias de tipos de datos Unicode, la configuración regional no se tiene en cuenta a la hora de ordenar los datos. Por ejemplo, Latin_1_General_BIN y Japanese_BIN producen resultados de orden idénticos cuando se utilizan en datos Unicode.Las intercalaciones binarias de las versiones anteriores de SQL Server comparaban el primer carácter como WCHAR, seguido de una comparación byte a byte. Por razones de compatibilidad con versiones anteriores, la semántica de intercalación binaria no se cambiará.
Las intercalaciones binarias de esta versión de SQL Server incluyen un conjunto de intercalaciones de comparación de puntos de código puras. Puede migrar a las intercalaciones binarias para aprovecharse de las verdaderas comparaciones de puntos de código. Debe utilizar las intercalaciones binarias para desarrollar aplicaciones nuevas. El sufijo BIN2 identifica los nombres de intercalación que implementan la nueva semántica de intercalación de punto de código. También hay un marcador de comparación que corresponde a BIN2 para el orden binario. Para obtener más información, vea Directrices para utilizar intercalaciones BIN y BIN2.
SQL Server
Las intercalaciones de SQL Server (SQL_*) son compatibles en cuanto al criterio de ordenación con las versiones anteriores de SQL Server. Las reglas de ordenación alfabética de datos no Unicode no son compatibles con ninguna rutina de ordenación suministrada por los sistemas operativos Windows. Sin embargo, la ordenación de datos Unicode es compatible con una versión especial de las reglas de ordenación de Windows. Como las intercalaciones de SQL Server utilizan reglas de comparación diferentes para los datos Unicode y para los que no son Unicode, verá resultados diferentes en las comparaciones de los mismos datos, dependiendo del tipo de datos subyacente. Para obtener más información, vea Usar intercalaciones de SQL Server.[!NOTA]
Al actualizar una instancia en idioma inglés de SQL Server, se puede especificar la compatibilidad de las intercalaciones de SQL Server (SQL_*) con las instancias existentes de SQL Server. Como la intercalación predeterminada de una instancia de SQL Server se define durante la instalación, es importante especificar con cuidado la configuración de la intercalación cuando se cumple lo siguiente:
El código de la aplicación depende del comportamiento de las intercalaciones de SQL Server anteriores.
Se va a utilizar la replicación de SQL Server con instalaciones existentes de SQL Server 6.5 o SQL Server 7.0.
Se deben almacenar datos de caracteres que reflejen varios idiomas.
Se admite el establecimiento de intercalaciones en los siguientes niveles de una instancia de SQL Server:
Intercalaciones de nivel de servidor
La intercalación predeterminada se establece durante la instalación de SQL Server y también se convierte en la intercalación predeterminada de las bases de datos del sistema. Observe que las intercalaciones exclusivas de Unicode no pueden seleccionarse durante la instalación de SQL Server porque no se admiten como intercalaciones de nivel de servidor.Después de asignar una intercalación a un objeto distinto de una columna o base de datos, no puede cambiar la intercalación excepto si elimina y vuelve a crear el objeto. En lugar de cambiar la intercalación predeterminada de una instancia de SQL Server, puede especificar la intercalación en el momento de crear una base de datos o una columna de base de datos.
Para consultar la intercalación de servidor de una instancia de SQL Server, utilice la siguiente función SERVERPROPERTY de Transact-SQL:
SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
Para consultar todas las intercalaciones disponibles del servidor, utilice la siguiente función integrada de fn_helpcollations():
SELECT * from ::fn_helpcollations()
Intercalaciones de nivel de base de datos
Cuando se crea una base de datos, se puede utilizar la cláusula COLLATE de la instrucción CREATE DATABASE para especificar la intercalación predeterminada de la base de datos. Si no especifica ninguna intercalación, a la base de datos se le asigna la intercalación predeterminada de la base de datos modelo. La intercalación de la base de datos modelo es la misma que la intercalación predeterminada de la instancia de SQL Server.La intercalación de una base de datos de usuario se puede cambiar con una instrucción ALTER DATABASE similar a la siguiente:
ALTER DATABASE myDB COLLATE Greek_CS_AI
La intercalación actual de una base de datos se puede recuperar con una instrucción similar a la siguiente:
SELECT CONVERT (varchar, DATABASEPROPERTYEX('database_name','collation'))
[!NOTA]
La alteración de la intercalación de nivel de base de datos no afecta a las intercalaciones de columna o de nivel de expresión.
Intercalaciones de columna
Cuando se crea una tabla, se pueden especificar intercalaciones para cada columna de cadena de caracteres mediante la cláusula COLLATE de la instrucción CREATE TABLE. Si no se especifica una intercalación, a la columna se le asigna la intercalación predeterminada de la base de datos.La intercalación de una columna se puede cambiar con una instrucción ALTER TABLE similar a la siguiente:
ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Greek_CS_AI
Intercalaciones de nivel de expresión
Las intercalaciones de nivel de expresión se establecen cuando se ejecuta una instrucción y afectan al modo en que se devuelve un conjunto de resultados. Esto permite que los resultados de la ordenación ORDER BY sean específicos de la configuración regional. Utilice una cláusula COLLATE como la siguiente para implementar intercalaciones de nivel de expresión:SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI
Volver al principio
Configuración regional
Una configuración regional es un conjunto de información que está asociado a un lugar o una referencia cultural. Puede incluir el nombre e identificador del idioma hablado, la escritura que se utiliza para escribir el idioma y las convenciones culturales. Las intercalaciones pueden estar asociadas a una o varias configuraciones regionales.
Volver al principio
Unicode
Si almacena datos de caracteres que reflejan varios idiomas, utilice siempre tipos de datos Unicode (nchar, nvarchar y ntext) en lugar de tipos de datos que no sean Unicode (char, varchar y text).
Hay limitaciones significativas asociadas a los tipos de datos no Unicode. Esto se debe a que un equipo no Unicode se limitará a utilizar una única página de códigos. Podría experimentar una ganancia en el rendimiento mediante Unicode porque se requieren menos conversiones de páginas de códigos. Las intercalaciones Unicode deben seleccionarse individualmente en el nivel de expresión, base de datos o columna porque no se admiten en el nivel de servidor.
Las páginas de códigos que un cliente usa se determinan en la configuración del sistema operativo. Para establecer las páginas de códigos del cliente en los sistemas operativos Windows 2000, Windows XP, Windows Server 2003 o Windows Server 2008, use Configuración regional en el Panel de control.
Al mover los datos de un servidor a un cliente, los controladores de cliente anteriores podrían no reconocer la intercalación del servidor. Esto puede ocurrir al mover los datos de un servidor Unicode a un cliente no Unicode. La mejor opción podría ser actualizar el sistema operativo cliente para que las intercalaciones del sistema subyacentes se actualicen. Si el cliente tiene instalado software cliente de base de datos, se puede considerar la posibilidad de aplicar a dicho software una actualización de servicio.
También puede intentar utilizar una intercalación diferente para los datos del servidor. Elija una intercalación que se asignará a una página de códigos en el cliente. Para obtener más información, vea el tema "Establecer y cambiar las intercalaciones" de los Libros en pantalla de SQL Server.
Para evaluar completamente los problemas relacionados con el uso de tipos de datos Unicode y no Unicode, pruebe su escenario para cuantificar las diferencias de rendimiento en su entorno. Se recomienda normalizar la intercalación que se usa en los sistemas de una organización e implementar servidores y clientes Unicode siempre que sea posible. Para obtener más información acerca de Unicode, vea el sitio web de Unicode Consortium.
En muchos casos, SQL Server interactuará con otros servidores y clientes, y la organización podría utilizar varios estándares de acceso a datos entre las aplicaciones y las instancias de servidor. Los clientes de SQL Server son de dos tipos principales:
Clientes Unicode que utilizan OLE DB y Conectividad abierta de bases de datos (ODBC) versión 3.7 o posteriores.
Clientes no Unicode que utilizan DB-Library y ODBC versión 3.6 o anteriores.
En la tabla siguiente se proporciona información acerca de cómo usar datos multilingües con varias combinaciones de servidores Unicode y no Unicode.
Servidor |
Cliente |
Beneficios o limitaciones |
---|---|---|
Unicode |
Unicode |
Dado que los datos Unicode se utilizarán en todo el sistema, este escenario proporciona el máximo rendimiento y protección frente a daños de los datos recuperados. Se trata de la situación de Objetos de datos ActiveX (ADO), OLE DB y ODBC versión 3.7 o posteriores. |
Unicode |
No Unicode |
En este escenario y especialmente con las conexiones entre un servidor que ejecuta un sistema operativo más reciente y un cliente que ejecuta una versión anterior de SQL Server o un sistema operativo anterior, puede haber limitaciones o producirse errores al mover los datos a un equipo cliente. Los datos Unicode del servidor intentarán asignarse a una página de códigos correspondiente en el cliente no Unicode para convertir los datos. |
No Unicode |
Unicode |
No es una configuración ideal para utilizar datos multilingües. No puede escribir los datos Unicode en el servidor no Unicode. Es probable que se produzcan problemas si los datos se envían a servidores externos a la página de códigos del servidor. |
No Unicode |
No Unicode |
Se trata de un escenario muy limitado para datos multilingües. Puede utilizar sólo una única página de códigos. |
Si experimenta errores o dificultades al mover datos de un servidor a un cliente, en concreto, de un servidor Unicode a un cliente no Unicode, es posible que los controladores cliente anteriores no reconozcan la intercalación del servidor. En esta situación, la mejor opción podría ser actualizar el sistema operativo cliente para que las intercalaciones del sistema subyacentes se actualicen. Si el cliente tiene instalado software cliente de base de datos, se puede considerar la posibilidad de aplicar a dicho software una actualización de servicio.
También puede intentar utilizar una intercalación diferente para los datos del servidor. Elija una intercalación que se asignará a una página de códigos en el cliente. Para obtener más información sobre cómo cambiar intercalaciones, vea el tema "Establecer y cambiar intercalaciones en SQL Server" en los Libros en pantalla de SQL Server. Para obtener más información sobre cómo cambiar las intercalaciones, vea las notas del producto "SQL Server Best Practices Collation Change" (en inglés). Para obtener más información sobre cómo migrar los tipos de datos no Unicode a Unicode, vea las notas de producto "SQL Server Best Practices Migration to Unicode" (en inglés).
Temas relacionados:Conceptos básicos de Unicode
Volver al principio
Página de códigos
Una página de códigos es un juego ordenado de caracteres en un script determinado en el que un índice numérico, o un valor de punto de código, está asociado con cada carácter. Una página de códigos de Windows se denomina normalmente juego de caracteres o charset. Las páginas de códigos se utilizan para ofrecer compatibilidad con los juegos de caracteres y las distribuciones de teclado que se usan en distintas configuraciones regionales del sistema Windows.
Todas las intercalaciones Unicode de Windows Server 2008 se basan en Unicode 5.0.
Volver al principio
Tipos de datos
Un tipo de datos es una definición que especifica un intervalo de valores, las operaciones que se pueden realizar en ellos y el modo en que éstos se almacenan en la memoria. La definición de tipos de datos permite a SQL Server tratar los datos de forma previsible. Los tipos de datos de caracteres no Unicode son char, varchar y text. Los tipos de datos de caracteres no Unicode son nchar, nvarchar y ntext. Se recomienda el uso de tipos de datos Unicode en las aplicaciones, especialmente si se almacenan datos de caracteres que reflejan varios idiomas.
Para obtener más información acerca de cómo migrar los tipos de datos no Unicode a Unicode, vea las notas del producto "SQL Server Best Practices Migration to Unicode" (en inglés).
Temas relacionados:Tipos de datos (motor de base de datos), Tipos de datos (Transact-SQL), Tipos de datos de Integration Services
Volver al principio
Criterio de ordenación
El criterio de ordenación especifica cómo se ordenan los valores de datos. Esto afecta a los resultados de la comparación de los datos. Los datos se ordenan con las intercalaciones, y se pueden optimizar mediante los índices.
Temas relacionados:Estilos de orden de la intercalación de Windows, Índices
Volver al principio