Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 los tipos de datos de caracteres, como char y varchar, determinan la codificación y los caracteres correspondientes que pueden representarse para ese tipo de datos. Tanto si va a instalar una nueva instancia 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 que comprenda 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 va a trabajar. Para enumerar las intercalaciones disponibles en la instancia de SQL Server, consulte sys.fn_helpcollations (Transact-SQL).
Al seleccionar una intercalación para un servidor, una base de datos, una columna o una expresión, va a asignar determinadas características a los datos que afectarán a los resultados de muchas operaciones de la base de datos. Por ejemplo, al construir una consulta mediante 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 se dicta en una cláusula COLLATE en el nivel de expresión de la consulta.
Para aprovechar al máximo la compatibilidad con la intercalación en SQL Server, debe comprender los términos definidos en este tema y cómo se relacionan con las características de los datos.
Colación
Una intercalación especifica los patrones de bits que representan cada carácter de un conjunto de datos. Las intercalaciones también determinan las reglas que ordenan y comparan los datos. SQL Server permite almacenar los objetos que tienen 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 son Unicode deben convertirse de la página de códigos fuente 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, use una clasificación estandarizada para su organización. De este modo, no es necesario 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 Precedencia de intercalación (Transact-SQL).
Las opciones asociadas a una intercalación son distinción entre mayúsculas y minúsculas, sensibilidad a los acentos, sensibilidad de kana, sensibilidad al ancho. Estas opciones se especifican anexándolas al nombre de ordenación. Por ejemplo, esta intercalación Japanese_Bushu_Kakusu_100_CS_AS_KS_WS distingue entre mayúsculas y minúsculas, acentos, kana y anchura. En la tabla siguiente se describe el comportamiento asociado a estas opciones.
| Opción | Descripción |
|---|---|
| Distinguir mayúsculas de minúsculas (_CS) | Distingue entre letras mayúsculas y minúsculas. Si se selecciona, las letras minúsculas se ordenan por delante de sus versiones en mayúsculas. Si no se selecciona esta opción, la intercalación no distingue mayúsculas de minúsculas. Es decir, SQL Server considera las versiones mayúscula y minúscula de las letras como letras idénticas a efectos de ordenación. Puede seleccionar explícitamente no distinguir entre mayúsculas y minúsculas especificando _CI. |
| Distinguir acentos (_AS) | Distingue entre caracteres acentuados y no acentuados. Por ejemplo, "a" no es igual a "ấ". Si no se selecciona esta opción, la intercalación no distingue acentos. Es decir, SQL Server considera las versiones acentuadas y no acentuadas de las letras como letras idénticas a efectos de ordenación. Puede seleccionar explícitamente no distinguir acentos especificando _AI. |
| Distinguir kana (_KS) | Distingue entre dos tipos de caracteres kana japoneses: Hiragana y Katakana. Si esta opción no está seleccionada, la intercalación es insensible a kana. Es decir, SQL Server considera los caracteres Hiragana y Katakana como caracteres iguales a efectos de ordenación. Omitir esta opción es el único método para especificar la insensibilidad al kana. |
| Distinguir ancho (_WS) | Distingue entre caracteres de ancho total y ancho medio. Si no se selecciona esta opción, SQL Server considera que la representación de ancho completo y de ancho medio del mismo carácter es idéntica con fines de ordenación. La omisión de esta opción es el único método para especificar no distinción de ancho. |
SQL Server admite los siguientes conjuntos de intercalación:
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. Para una intercalación de Windows, la comparación de datos no Unicode se implementa con el mismo algoritmo que los datos Unicode. Las reglas base de intercalación de Windows especifican qué alfabeto o idioma se usa cuando se aplica la ordenación del diccionario y la página de códigos que se usa para almacenar 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. Esto proporciona coherencia entre los tipos de datos de SQL Server y también permite a los desarrolladores ordenar cadenas en sus aplicaciones mediante las mismas reglas que SQL Server usa. Para obtener más información, vea Nombre de intercalación de Windows (Transact-SQL).
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 ordenación binaria en SQL Server define la configuración regional y la página de códigos ANSI que se utilizará. 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 el caso de los tipos de datos que no son Unicode, las comparaciones de datos se basan en los puntos de código definidos 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 el caso de las intercalaciones binarias en tipos de datos de Unicode, la configuración regional no se considera en las ordenaciones de datos. Por ejemplo, Latin_1_General_BIN y Japanese_BIN producen resultados de ordenación idénticos cuando se usan en datos Unicode.
Hay dos tipos de intercalaciones binarias en SQL Server; las intercalaciones anteriores BIN y las intercalaciones más recientes BIN2 . En una BIN2 ordenación, todos los caracteres se ordenan según sus puntos de código. En una BIN ordenación, solo se ordena el primer carácter por el punto de código y los caracteres restantes se ordenan según sus valores de byte. (Dado que la plataforma Intel es una arquitectura de extremo inferior, los caracteres de código Unicode siempre se almacenan con intercambio de bytes).
Intercalaciones de 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 de diccionario para datos que no son Unicode no son compatibles con cualquier rutina de ordenación proporcionada 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. Dado que las intercalaciones de SQL Server usan reglas de comparación diferentes para datos no Unicode y Unicode, verá resultados diferentes para comparaciones de los mismos datos, en función del tipo de datos subyacente. Para obtener más información, consulte Nombre de intercalación de SQL Server (Transact-SQL).
Nota:
Al actualizar una instancia en inglés de SQL Server, se pueden especificar intercalaciones de SQL Server (SQL_*) para la compatibilidad con instancias existentes de SQL Server. Dado que la intercalación predeterminada para una instancia de SQL Server se define durante la instalación, asegúrese de especificar cuidadosamente la configuración de 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 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 de servidor 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 y todas las bases de datos de usuario. Tenga en cuenta que las intercalaciones de solo Unicode no se pueden seleccionar durante la instalación de SQL Server porque no se admiten como intercalaciones de nivel de servidor.
Después de asignar una intercalación al servidor, no puede cambiar la intercalación excepto exportando todos los objetos y datos de la base de datos, reconstruyendo la master base de datos e importando todos los objetos y datos de la base de datos. En lugar de cambiar la intercalación predeterminada de una instancia de SQL Server, puede especificar la intercalación deseada en el momento en que cree una nueva columna de base de datos o base de datos.
Intercalaciones de nivel de base de datos
Cuando se crea o modifica una base de datos, puede usar la cláusula COLLATE de la instrucción CREATE DATABASE o ALTER DATABASE para especificar la intercalación de base de datos predeterminada. Si no se especifica ninguna intercalación, se asigna a la base de datos la intercalación de servidor.
No se puede cambiar la intercalación de las bases de datos del sistema, excepto al cambiar la intercalación del servidor.
La intercalación de base de datos se usa para todos los metadatos de la base de datos y es el valor predeterminado para todas las columnas de cadena, objetos temporales, nombres de variables y cualquier otra cadena usada en la base de datos. Cuando se cambia la intercalación de una base de datos de usuario, pueden producirse conflictos de intercalación cuando las consultas en la base de datos tienen acceso a tablas temporales. Las tablas temporales siempre se almacenan en la base de datos del tempdb sistema, que usará la intercalación para la instancia. Las consultas que comparan los datos de caracteres entre la base de datos de usuario y tempdb pueden producir un error si las intercalaciones provocan un conflicto al evaluar los datos de caracteres. Para resolverlo, especifique la cláusula COLLATE en la consulta. Para obtener más información, vea COLLATE (Transact-SQL).
Intercalaciones de columna
Al crear o modificar una tabla, puede especificar intercalaciones para cada columna de cadena de caracteres mediante la cláusula COLLATE. Si no se especifica ninguna intercalación, a la columna se le asigna la intercalación predeterminada de la base de datos.
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 con ORDER BY sean específicos de la localización. Use 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;
Localización
Una configuración regional es un conjunto de información asociado a una ubicación o una cultura. Esto puede incluir el nombre y el identificador del idioma hablado, el script que se usa para escribir el idioma y las convenciones culturales. Las intercalaciones pueden estar asociadas a una o varias configuraciones regionales. Para obtener más información, vea Id. de configuración regional asignados por Microsoft.
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. Normalmente, una página de códigos de Windows se conoce como un juego de caracteres o un juego de caracteres. Las páginas de códigos se usan para ofrecer compatibilidad con los juegos de caracteres y las distribuciones de teclado que se usan en distintas configuraciones regionales del sistema Windows.
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 datos. Los datos se ordenan con las intercalaciones, y se pueden optimizar mediante los índices.
Compatibilidad con Unicode
Unicode es un estándar que permite asignar puntos de código con caracteres. Dado que está diseñado para cubrir todos los caracteres de todos los idiomas del mundo, no es necesario que diferentes páginas de códigos controlen diferentes conjuntos de caracteres. Si almacena datos de caracteres que reflejan varios idiomas, use siempre tipos de datos Unicode (nchar, nvarchary ntext) en lugar de los tipos de datos no Unicode (char, varchary text).
Hay limitaciones significativas asociadas a los tipos de datos no Unicode. Esto se debe a que un equipo que no es Unicode se limitará al uso de una sola página de códigos. Es posible que experimente una ganancia de rendimiento mediante Unicode porque se requieren menos conversiones de página de códigos. Las intercalaciones Unicode deben seleccionarse individualmente en el nivel de base de datos, columna o expresión porque no se admiten en el nivel de servidor.
Las páginas de códigos que usa un cliente están determinadas por la configuración del sistema operativo. Para establecer las páginas de códigos del cliente en los sistemas operativos Windows, 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 usar las intercalaciones UTF-16 disponibles en SQL Server 2019 (15.x), puede seleccionar una de las intercalaciones de caracteres _SC adicionales (solo intercalaciones de Windows) para mejorar la búsqueda y ordenación de algunos caracteres Unicode.
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. Es recomendable estandarizar la intercalación que se usa en sistemas de toda la organización e implementar servidores y clientes Unicode siempre que sea posible.
En muchas situaciones, SQL Server interactuará con otros servidores o clientes, y su organización podría usar varios estándares de acceso a datos entre aplicaciones e instancias de servidor. Los clientesSQL Server son uno de los dos tipos principales:
Clientes Unicode que usan OLE DB y Open Database Connectivity (ODBC) versión 3.7 o una versión posterior.
Clientes no Unicode que usan DB-Library y ODBC versión 3.6 o una versión anterior.
En la tabla siguiente se proporciona información sobre el uso de datos multilingües con varias combinaciones de servidores Unicode y no Unicode.
| Servidor | Cliente | Ventajas o limitaciones |
|---|---|---|
| Unicode | Unicode | Dado que los datos Unicode se usarán en todo el sistema, este escenario proporciona el mejor rendimiento y protección contra daños en los datos recuperados. Esta es la situación con Objetos de datos ActiveX (ADO), OLE DB y ODBC versión 3.7 o posterior. |
| Unicode | No Unicode | En este escenario, especialmente con 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 en un sistema operativo anterior, puede haber limitaciones o errores al mover datos a un equipo cliente. Los datos Unicode en el servidor se intentarán asignar a la página de código correspondiente en el cliente no Unicode para convertir los datos. |
| No Unicode | Unicode | Esta no es una configuración ideal para usar datos multilingües. No se pueden escribir 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 usar solo una única página de códigos. |
Caracteres adicionales
SQL Server proporciona tipos de datos como nchar y nvarchar para almacenar datos Unicode. Estos tipos de datos codifican texto en un formato denominado UTF-16. El Consorcio Unicode asigna cada carácter un punto de código único, que es un valor del intervalo 0x0000 a 0x10FFFF. Los caracteres usados con más frecuencia tienen valores de punto de código que caben en una palabra de 16 bits en memoria y en disco, pero los caracteres con valores de punto de código mayores que 0xFFFF requieren dos palabras consecutivas de 16 bits. Estos caracteres se denominan caracteres complementarios y las dos palabras consecutivas de 16 bits se denominan pares suplentes.
Si utiliza caracteres adicionales:
Los caracteres adicionales se pueden utilizar en las operaciones de ordenación y comparación en las versiones de intercalación 90 o mayores.
Todas las intercalaciones de nivel _100 admiten la ordenación lingüística con caracteres complementarios.
No se admiten caracteres adicionales para su uso en metadatos, como en nombres de objetos de base de datos.
Introducido en SQL Server 2012, se puede usar una nueva familia de intercalaciones de caracteres complementarios (SC) con los tipos de datos
nchar,nvarcharysql_variant. Por ejemplo:Latin1_General_100_CI_AS_SC, o si usa una intercalación japonesa,Japanese_Bushu_Kakusu_100_CI_AS_SC.La marca SC se puede aplicar a:
Intercalaciones de Windows de la versión 90
Intercalaciones de Windows de la versión 100
No se puede aplicar la marca SC a:
Intercalaciones de Windows sin versión de la versión 80
Intercalaciones binarias BIN o BIN2
Intercalaciones SQL*
En la tabla siguiente se compara el comportamiento de algunas funciones y operadores de cadenas de caracteres cuando utilizan caracteres suplementarios, con y sin la colación SC.
| Función o operador de cadena | Con una intercalación sc | Sin una intercalación SC |
|---|---|---|
|
CHARINDEX LEN PATINDEX |
El par suplente UTF-16 se cuenta como un único punto de código. | El par suplente UTF-16 se cuenta como dos puntos de código. |
|
IZQUIERDA REEMPLAZAR MARCHA ATRÁS DERECHA SUBCADENA COSAS |
Estas funciones tratan cada par suplente como un único punto de código y funcionan según lo previsto. | Estas funciones pueden dividir los pares suplentes y provocar resultados inesperados. |
| NCHAR | Devuelve el carácter correspondiente al valor de punto de código Unicode especificado en el intervalo de 0 a 0x10FFFF. Si el valor especificado se encuentra en el intervalo comprendido entre 0 y 0xFFFF, se devuelve un carácter. Con valores más altos, se devuelve el suplente correspondiente. | Un valor mayor que 0xFFFF devuelve NULL en lugar del suplente correspondiente. |
| UNICODE | Devuelve un punto de código UTF-16 en el intervalo de 0 a 0x10FFFF. | Devuelve un punto de código UCS-2 en el intervalo de 0 a 0xFFFF. |
|
Hacer coincidir un carácter comodín Carácter comodín - caracteres no coincidentes |
Se admiten caracteres adicionales para todas las operaciones de caracteres comodín. | No se admiten caracteres adicionales para estas operaciones con caracteres comodín. Se admiten otros operadores de caracteres comodín. |
compatibilidad con GB18030
GB18030 es un estándar independiente utilizado en la República Popular china para codificar caracteres chinos. En GB18030, los caracteres pueden tener una longitud de 1, 2 o 4 bytes. SQL Server admite caracteres de codificación GB18030, reconociéndolos en el momento de su entrada en un servidor procedentes de una aplicación del lado cliente y convirtiéndolos y almacenándolos de forma nativa como caracteres Unicode. Una vez almacenados en el servidor, se tratan como caracteres Unicode en las operaciones posteriores. Puede usar cualquier intercalación china, preferentemente la más reciente: la versión 100. Todas las intercalaciones de nivel _100 admiten la ordenación lingüística con caracteres GB18030. Si los datos incluyen caracteres suplementarios (pares suplentes), puede usar las intercalaciones SC disponibles en SQL Server 2019 (15.x) para mejorar la búsqueda y la ordenación.
Compatibilidad con scripts complejos
SQL Server puede admitir la entrada, el almacenamiento, el cambio, y la visualización de escrituras complejas. Entre los scripts complejos se incluyen los siguientes:
Escritura que incluye la combinación de texto de derecha a izquierda y de izquierda a derecha, caso de una combinación de textos en árabe e inglés.
Escritura cuyos caracteres cambian de forma dependiendo de su posición, o al combinarse con otros caracteres como, por ejemplo, los caracteres del árabe, el índico y el tailandés.
Idiomas como el tailandés requieren diccionarios internos para reconocer las palabras porque no hay espacios entre ellas.
Las aplicaciones de base de datos que interactúan con SQL Server deben utilizar controles que sean compatibles con escritura compleja. Los controles estándar de formularios de Windows que se crean en código administrado son compatibles con secuencias de comandos complejas.
Tareas relacionadas
| Tarea | Tema |
|---|---|
| Describe cómo establecer o cambiar la intercalación de la instancia de SQL Server. | Establecer o cambiar la intercalación del servidor |
| Describe cómo establecer o cambiar la intercalación de una base de datos de usuario. | Establecer o cambiar la intercalación de base de datos |
| Describe cómo establecer o cambiar la intercalación de una columna de la base de datos. | Establecer o cambiar la intercalación de columnas |
| Describe cómo devolver información de intercalación en el servidor, la base de datos, o el nivel de columna. | Ver información de intercalación |
| Describe cómo escribir instrucciones Transact-SQL que las harán más portátiles de un idioma a otro, o admitir varios idiomas más fácilmente. | Escribir instrucciones Transact-SQL internacionales |
| Describe cómo cambiar el idioma de los mensajes de error y las preferencias de uso y visualización de datos de fecha, hora y moneda. | Establecer un idioma de la sesión |
Contenido relacionado
Prácticas recomendadas para cambiar las intercalaciones en SQL Server
"Migración de procedimientos recomendados de SQL Server a Unicode"
Sitio web de Unicode Consortium
Véase también
Intercalaciones de base de datos contenidas
Elegir un idioma al crear un índice de texto completo
sys.fn_helpcollations (Transact-SQL)