Collation and Unicode SupportCollation and Unicode Support

SE APLICA A: síSQL Server síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Las intercalaciones de SQL ServerSQL Server proporcionan propiedades de distinción entre mayúsculas y minúsculas, acentos y reglas de ordenación para los datos.Collations in SQL ServerSQL Server provide sorting rules, case, and accent sensitivity properties for your data. Las intercalaciones que se usan 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.Collations that are used with character data types such as char and varchar dictate the code page and corresponding characters that can be represented for that data type. Si va a instalar una instancia nueva de SQL ServerSQL Server, restaurar una copia de seguridad de la base de datos o conectar el servidor a 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 está trabajando.Whether you are installing a new instance of SQL ServerSQL Server, restoring a database backup, or connecting server to client databases, it is important that you understand the locale requirements, sorting order, and case and accent sensitivity of the data that you are working with. Para ver una lista de las intercalaciones disponibles en la instancia de SQL ServerSQL Server, vea sys.fn_helpcollations (Transact-SQL).To list the collations available on your instance of SQL ServerSQL Server, see sys.fn_helpcollations (Transact-SQL).

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 afectan a los resultados de muchas operaciones de la base de datos.When you select a collation for your server, database, column, or expression, you are assigning certain characteristics to your data that affects the results of many operations in the database. 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.For example, when you construct a query by using ORDER BY, the sort order of your result set might depend on the collation that is applied to the database or dictated in a COLLATE clause at the expression level of the query.

Para hacer el mejor uso posible de la compatibilidad con la intercalación en SQL ServerSQL 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.To best use collation support in SQL ServerSQL Server, you must understand the terms that are defined in this topic, and how they relate to the characteristics of your data.

Términos de intercalaciónCollation Terms

IntercalaciónCollation

Una intercalación especifica los patrones de bits que representan a cada carácter de un conjunto de datos.A collation specifies the bit patterns that represent each character in a data set. Las intercalaciones también determinan las reglas que ordenan y comparan los datos.Collations also determine the rules that sort and compare data. SQL ServerSQL Server permite almacenar los objetos que tienen intercalaciones diferentes en una sola base de datos.supports storing objects that have different collations in a single database. 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.For non-Unicode columns, the collation setting specifies the code page for the data and which characters can be represented. 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.Data that is moved between non-Unicode columns must be converted from the source code page to the destination code page.

Los resultados de las instrucciones deTransact-SQLTransact-SQL pueden variar cuando se ejecutan en el contexto de bases de datos distintas que tengan una configuración de intercalación diferente.Transact-SQLTransact-SQL statement results can vary when the statement is run in the context of different databases that have different collation settings. Si es posible, utilice una intercalación normalizada para su organización.If it is possible, use a standardized collation for your organization. De esta manera no tiene que especificar explícitamente la intercalación en cada carácter o expresión Unicode.This way, you do not have to explicitly specify the collation in every character or Unicode expression. 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.If you must work with objects that have different collation and code page settings, code your queries to consider the rules of collation precedence. Para obtener más información, vea Prioridad de intercalación (Transact-SQL).For more information, see Collation Precedence (Transact-SQL).

Las opciones asociadas con una intercalación son la distinción de mayúsculas y minúsculas, la distinción de acentos, la distinción de tipos de kana, la distinción de ancho y la distinción de selector de variación.The options associated with a collation are case sensitivity, accent sensitivity, Kana-sensitivity, width sensitivity, variation-selector-sensitivity. SQL Server 2019SQL Server 2019 presenta una opción adicional para la codificación UTF-8.introduces an additional option for UTF-8 encoding. Estas opciones se especifican anexándolas al nombre de intercalación.These options are specified by appending them to the collation name. Por ejemplo, la intercalación Japanese_Bushu_Kakusu_100_CS_AS_KS_WS_UTF8 es una intercalación con distinción entre mayúsculas y minúsculas, distinción de acentos, distinción de tipos de kana, distinción de ancho y con codificación UTF-8.For example, this collation Japanese_Bushu_Kakusu_100_CS_AS_KS_WS_UTF8 is case-sensitive, accent-sensitive, Kana-sensitive, width-sensitive, and UTF-8 encoded. Otro ejemplo: la intercalación Japanese_Bushu_Kakusu_140_CI_AI_KS_WS_VSS no distingue entre mayúsculas y minúsculas y acentos, distingue los tipos de kana, el ancho, el selector de variación y usa codificación distinta de Unicode.As another example, this collation Japanese_Bushu_Kakusu_140_CI_AI_KS_WS_VSS is case-insensitive, accent-insensitive, Kana-sensitive, width-sensitive, variation-selector-sensitive and uses non-Unicode encoding. En la tabla siguiente se describe el comportamiento asociado a estas diversas opciones.The following table describes the behavior associated with these various options.

OpciónOption DescripciónDescription
Distinguir mayúsculas de minúsculas (_CS)Case-sensitive (_CS) Distingue entre letras mayúsculas y minúsculas.Distinguishes between uppercase and lowercase letters. Si se selecciona, las letras minúsculas se ordenan por delante de sus versiones en mayúsculas.If selected, lowercase letters sort ahead of their uppercase versions. Si esta opción no está seleccionada, la intercalación no distinguirá mayúsculas de minúsculas.If this option is not selected, the collation is case-insensitive. Es decir, SQL ServerSQL Server considera las versiones mayúscula y minúscula de las letras como letras idénticas a efectos de ordenación.That is, SQL ServerSQL Server considers the uppercase and lowercase versions of letters to be identical for sorting purposes. Puede seleccionar explícitamente no distinguir entre mayúsculas y minúsculas especificando _CI.You can explicitly select case insensitivity by specifying _CI.
Distinguir acentos (_AS)Accent-sensitive (_AS) Distingue entre caracteres acentuados y no acentuados.Distinguishes between accented and unaccented characters. Por ejemplo, 'a' no es igual a 'ấ'.For example, 'a' is not equal to 'ấ'. Si esta opción no está seleccionada, la intercalación no distinguirá acentos.If this option is not selected, the collation is accent-insensitive. Es decir, SQL ServerSQL Server considera las versiones acentuadas y no acentuadas de las letras como letras idénticas a efectos de ordenación.That is, SQL ServerSQL Server considers the accented and unaccented versions of letters to be identical for sorting purposes. Puede seleccionar explícitamente no distinguir acentos especificando _AI.You can explicitly select accent insensitivity by specifying _AI.
Distinguir kana (_KS)Kana-sensitive (_KS) Distingue entre dos tipos de caracteres kana japoneses: Hiragana y Katakana.Distinguishes between the two types of Japanese kana characters: Hiragana and Katakana. Si esta opción no está seleccionada, la intercalación no distinguirá los caracteres kana.If this option is not selected, the collation is Kana-insensitive. Es decir, SQL ServerSQL Server considera los caracteres Hiragana y Katakana como caracteres iguales a efectos de ordenación.That is, SQL ServerSQL Server considers Hiragana and Katakana characters to be equal for sorting purposes. La omisión de esta opción es el único método para especificar Kana-insensibilidad.Omitting this option is the only method of specifying Kana-insensitivity.
Distinguir ancho (_WS)Width-sensitive (_WS) Distingue entre caracteres de ancho total y ancho medio.Distinguishes between full-width and half-width characters. Si no se activa esta opción, SQL ServerSQL Server considera que la representación de ancho completo y de ancho medio del mismo carácter son idénticas para la ordenación.If this option is not selected, SQL ServerSQL Server considers the full-width and half-width representation of the same character to be identical for sorting purposes. La omisión de esta opción es el único método para especificar no distinción de ancho.Omitting this option is the only method of specifying width-insensitivity.
Distinguir selector de variación (_VSS)Variation-selector-sensitive (_VSS) Distingue distintos selectores de variación ideográfica en las intercalaciones del japonés Japanese_Bushu_Kakusu_140 y Japanese_XJIS_140, introducidas por primera vez en SQL Server 2017 (14.x)SQL Server 2017 (14.x).Distinguishes between various ideographic variation selectors in Japanese collations Japanese_Bushu_Kakusu_140 and Japanese_XJIS_140 first introduced in SQL Server 2017 (14.x)SQL Server 2017 (14.x). Una secuencia de variación consta de un carácter base y de un selector de variación adicional.A variation sequence consists of a base character plus an additional variation selector. Si no se selecciona la opción _VSS, la intercalación no distinguirá el selector de variación y este no se tendrá en cuenta en la comparación.If this _VSS option is not selected, the collation is variation selector insensitive, and the variation selector is not considered in the comparison. Es decir, SQL Server considera que los caracteres que se basan en el mismo carácter base con diferentes selectores de variación son idénticos con fines de ordenación.That is, SQL Server considers characters built upon the same base character with differing variation selectors to be identical for sorting purposes. Consulte también Unicode Ideographic Variation Database(Base de datos de variaciones ideográficas de Unicode).See also Unicode Ideographic Variation Database.

Las intercalaciones que distinguen selectores de variación (_VSS) no se admiten en los índices de búsqueda de texto completo.Variation selector sensitive (_VSS) collations are not supported in Full-text search indexes. Los índices de búsqueda de texto completo solo admiten opciones que distinguen acentos (_AS), que distinguen kana (_KS) y que distinguen ancho (_WS).Full-text search indexes support only Accent-Sensitive (_AS), Kana-sensitive (_KS), and Width-sensitive (_WS) options. Los motores XML y CLR de SQL Server no admiten selectores de variación (_VSS).SQL Server XML and CLR engines do not support (_VSS) Variation selectors.
UTF-8 (_UTF8)UTF-8 (_UTF8) Permite que los datos con codificación UTF-8 se almacenen en SQL ServerSQL Server.Enables UTF-8 encoded data to be stored in SQL ServerSQL Server. Si no se selecciona esta opción, SQL ServerSQL Server usa el formato de codificación distinto de Unicode de forma predeterminada para los tipos de datos aplicables.If this option is not selected, SQL ServerSQL Server uses the default non-Unicode encoding format for the applicable data types.

SQL ServerSQL Server admite los siguientes conjuntos de intercalación:supports the following collation sets:

intercalaciones de WindowsWindows collations

Las intercalaciones de Windows definen reglas para almacenar los datos de caracteres que se basan en una configuración regional del sistema Windows asociada.Windows collations define rules for storing character data that are based on an associated Windows system locale. 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.For a Windows collation, comparison of non-Unicode data is implemented by using the same algorithm as Unicode data. 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.The base Windows collation rules specify which alphabet or language is used when dictionary sorting is applied, and the code page that is used to store non-Unicode character data. 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.Both Unicode and non-Unicode sorting are compatible with string comparisons in a particular version of Windows. De este modo se proporciona coherencia entre los tipos de datos de SQL ServerSQL 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 ServerSQL Server.This provides consistency across data types within SQL ServerSQL Server, and it also lets developers sort strings in their applications by using the same rules that are used by SQL ServerSQL Server. Para obtener más información, vea Nombre de intercalación de Windows (Transact-SQL).For more information, see Windows Collation Name (Transact-SQL).

Intercalaciones binariasBinary collations

Las intercalaciones binarias ordenan los datos según la secuencia de valores codificados definidos por la configuración regional y el tipo de datos.Binary collations sort data based on the sequence of coded values that are defined by the locale and data type. Distinguen entre mayúsculas y minúsculas.They are case sensitive. Una intercalación binaria de SQL ServerSQL Server define la configuración regional y la página de códigos ANSI que se usa.A binary collation in SQL ServerSQL Server defines the locale and the ANSI code page that is used. Esto exige un criterio de ordenación binario.This enforces a binary sort order. Dado que son relativamente simples, las intercalaciones binarias ayudan a mejorar el rendimiento de la aplicación.Because they are relatively simple, binary collations help improve application performance. 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.For non-Unicode data types, data comparisons are based on the code points that are defined in the ANSI code page. En tipos de datos Unicode, las comparaciones de datos dependen de los puntos de código Unicode.For Unicode data types, data comparisons are based on the Unicode code points. En intercalaciones binarias de tipos de datos Unicode, la configuración regional no se tiene en cuenta a la hora de ordenar los datos.For binary collations on Unicode data types, the locale is not considered in data sorts. Por ejemplo, Latin_1_General_BIN y Japanese_BIN producen resultados de orden idénticos cuando se usan en datos Unicode.For example, Latin_1_General_BIN and Japanese_BIN yield identical sorting results when they are used on Unicode data.

Hay dos tipos de intercalaciones binarias en SQL ServerSQL Server; las intercalaciones BIN antiguas y las intercalaciones BIN2 nuevas.There are two types of binary collations in SQL ServerSQL Server; the older BIN collations and the newer BIN2 collations. En una intercalación BIN2 todos los caracteres se ordenan de acuerdo a sus puntos de código.In a BIN2 collation all characters are sorted according to their code points. En una intercalación BIN solamente el primer carácter se ordena de acuerdo al punto de código y el resto de ellos se ordenan según sus valores de byte.In a BIN collation only the first character is sorted according to the code point, and remaining characters are sorted according to their byte values. (Dado que la plataforma de Intel tiene una arquitectura "litte endian", los caracteres de codificación Unicode siempre se intercambian por bytes).(Because the Intel platform is a little endian architecture, Unicode code characters are always stored byte-swapped.)

Intercalaciones de SQL ServerSQL Server collations

Las intercalaciones de SQL ServerSQL Server (SQL_*) son compatibles en cuanto al criterio de ordenación con las versiones anteriores de SQL ServerSQL Server.SQL ServerSQL Server collations (SQL_*) provide sort order compatibility with earlier versions of SQL ServerSQL Server. Las reglas de ordenación alfabética de datos no Unicode son incompatibles con cualquier rutina de ordenación suministrada por los sistemas operativos Windows.The dictionary sorting rules for non-Unicode data are incompatible with any sorting routine that is provided by Windows operating systems. Sin embargo, la ordenación de datos Unicode es compatible con una versión especial de las reglas de ordenación de Windows.However, sorting Unicode data is compatible with a particular version of Windows sorting rules. Como las intercalaciones de SQL ServerSQL Server usan reglas de comparación diferentes para los datos Unicode y para los que no son Unicode, ve resultados diferentes en las comparaciones de los mismos datos, dependiendo del tipo de datos subyacente.Because SQL ServerSQL Server collations use different comparison rules for non-Unicode and Unicode data, you see different results for comparisons of the same data, depending on the underlying data type. Para obtener más información, vea Nombre de intercalación de SQL Server (Transact-SQL).For more information, see SQL Server Collation Name (Transact-SQL).

Nota

Al actualizar una instancia en idioma inglés de SQL ServerSQL Server, se puede especificar la compatibilidad de las intercalaciones de SQL ServerSQL Server (SQL_*) con las instancias existentes de SQL ServerSQL Server.When you upgrade an English-language instance of SQL ServerSQL Server, SQL ServerSQL Server collations (SQL_*) can be specified for compatibility with existing instances of SQL ServerSQL Server. Como la intercalación predeterminada de una instancia de SQL ServerSQL Server se define durante la instalación, asegúrese de especificar con cuidado la configuración de la intercalación cuando se cumple lo siguiente:Because the default collation for an instance of SQL ServerSQL Server is defined during setup, make sure that you specify collation settings carefully when the following are true:

  • El código de la aplicación depende del comportamiento de las intercalaciones de SQL ServerSQL Server anteriores.Your application code depends on the behavior of previous SQL ServerSQL Server collations.
  • Se deben almacenar datos de caracteres que reflejen varios idiomas.You must store character data that reflects multiple languages.

Se admite el establecimiento de intercalaciones en los siguientes niveles de una instancia de SQL ServerSQL Server:Setting collations are supported at the following levels of an instance of SQL ServerSQL Server:

Intercalaciones de nivel de servidorServer-level collations

La intercalación predeterminada de servidor se establece durante la instalación de SQL ServerSQL Server y también se convierte en la intercalación predeterminada de las bases de datos del sistema y de todas las bases de datos del usuario.The default server collation is set during SQL ServerSQL Server setup, and also becomes the default collation of the system databases and all user databases. Observe que las intercalaciones exclusivas de Unicode no pueden seleccionarse durante la instalación de SQL ServerSQL Server porque no se admiten como intercalaciones de nivel de servidor.Note that Unicode-only collations cannot be selected during SQL ServerSQL Server setup because they are not supported as server-level collations.

Después de que una intercalación se haya asignado al servidor, no puede cambiar la intercalación excepto exportando todos los objetos y datos de base de datos, recompilando la base de datos master e importando todos los objetos y datos de base de datos.After a collation has been assigned to the server, you cannot change the collation except by exporting all database objects and data, rebuilding the master database, and importing all database objects and data. En lugar de cambiar la intercalación predeterminada de una instancia de SQL ServerSQL Server, puede especificar la intercalación deseada en el momento de crear una base de datos o una columna de base de datos.Instead of changing the default collation of an instance of SQL ServerSQL Server, you can specify the desired collation at the time that you create a new database or database column.

Intercalaciones de nivel de base de datosDatabase-level collations

Cuando se crea una base de datos, se puede usar la cláusula COLLATE de la instrucción CREATE DATABASE para especificar la intercalación predeterminada de la base de datos.When a database is created or modified, you can use the COLLATE clause of the CREATE DATABASE or ALTER DATABASE statement to specify the default database collation. Si no se especifica ninguna intercalación, se asigna a la base de datos la intercalación de servidor.If no collation is specified, the database is assigned the server collation.

No puede cambiar la intercalación de base de datos del sistema excepto cambiando la intercalación del servidor.You cannot change the collation of system databases except by changing the collation for the server.

La intercalación de base de datos se usa para todos los metadatos de la base de datos, y es la predeterminada para todas las columnas de cadena, los objetos temporales, los nombres de variable, y cualquier otra cadena usada en la base de datos.The database collation is used for all metadata in the database, and is the default for all string columns, temporary objects, variable names, and any other strings used in the database. 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.When you change the collation of a user database, there can be collation conflicts when queries in the database access temporary tables. Las tablas temporales se almacenan siempre en la base de datos del sistema de tempdb, que usa la intercalación de la instancia.Temporary tables are always stored in the tempdb system database, which uses the collation for the instance. Las consultas que comparan datos de caracteres entre la base de datos de usuario y tempdb pueden generar un error si las intercalaciones producen un conflicto en la evaluación de los datos de caracteres.Queries that compare character data between the user database and tempdb may fail if the collations cause a conflict in evaluating the character data. Puede resolver esto especificando la cláusula COLLATE en la consulta.You can resolve this by specifying the COLLATE clause in the query. Para obtener más información, vea COLLATE (Transact-SQL).For more information, see COLLATE (Transact-SQL).

Intercalaciones de columnaColumn-level collations

Cuando cree o altere una tabla, puede especificar intercalaciones para cada columna de cadena de caracteres mediante la cláusula COLLATE.When you create or alter a table, you can specify collations for each character-string column by using the COLLATE clause. Si no se especifica una intercalación, a la columna se le asigna la intercalación predeterminada de la base de datos.If no collation is specified, the column is assigned the default collation of the database.

Intercalaciones de nivel de expresiónExpression-level collations

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.Expression-level collations are set when a statement is run, and they affect the way a result set is returned. Esto permite que los resultados de la ordenación ORDER BY sean específicos de la configuración regional.This enables ORDER BY sort results to be locale-specific. Utilice una cláusula COLLATE como la siguiente para implementar intercalaciones de nivel de expresión:Use a COLLATE clause such as the following to implement expression-level collations:

SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI;    

Configuración regionalLocale

Una configuración regional es un conjunto de información que está asociado a una ubicación o cultura.A locale is a set of information that is associated with a location or a culture. Puede incluir el nombre e identificador del idioma hablado, la escritura que se usa para escribir el idioma y las convenciones culturales.This can include the name and identifier of the spoken language, the script that is used to write the language, and cultural conventions. Las intercalaciones pueden estar asociadas a una o varias configuraciones regionales.Collations can be associated with one or more locales. Para obtener más información, vea Id. de configuración regional asignados por Microsoft.For more information, see Locale IDs Assigned by Microsoft.

Code PageCode Page

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.A code page is an ordered set of characters of a given script in which a numeric index, or code point value, is associated with each character. Una página de códigos de Windows se denomina normalmente juego de caracteres o charset.A Windows code page is typically referred to as a character set or charset. 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.Code pages are used to provide support for the character sets and keyboard layouts that are used by different Windows system locales.

Sort OrderSort Order

El criterio de ordenación especifica cómo se ordenan los valores de datos.Sort order specifies how data values are sorted. Esto afecta a los resultados de la comparación de los datos.This affects the results of data comparison. Los datos se ordenan con las intercalaciones, y se pueden optimizar mediante los índices.Data is sorted by using collations, and it can be optimized by using indexes.

Compatibilidad con UnicodeUnicode Support

Unicode es un estándar que permite asignar puntos de código con caracteres.Unicode is a standard for mapping code points to characters. Puesto que se ha diseñado para cubrir todos los caracteres de todos los idiomas del mundo, no es preciso usar páginas de códigos diferentes para controlar los distintos juegos de caracteres.Because it is designed to cover all the characters of all the languages of the world, there is no need for different code pages to handle different sets of characters.

Las páginas de códigos que un cliente usa se determinan en la configuración del sistema operativo.The code pages that a client uses are determined by the operating system settings. Para establecer las páginas de códigos del cliente en los sistemas operativos Windows, use Configuración regional en el Panel de control.To set client code pages on the Windows operating system, use Regional Settings in Control Panel.

Hay limitaciones significativas asociadas a los tipos de datos no Unicode.Significant limitations are associated with non-Unicode data types. Esto se debe a que un equipo no Unicode se limita a usar una única página de códigos.This is because a non-Unicode computer is limited to use of a single code page. Podría experimentar una ganancia en el rendimiento mediante Unicode porque se requieren menos conversiones de páginas de códigos.You might experience performance gain by using Unicode because fewer code-page conversions are required. Las intercalaciones Unicode deben seleccionarse de forma individual en el nivel de expresión, base de datos o columna porque no se admiten en el nivel de servidor.Unicode collations must be selected individually at the database, column, or expression level because they are not supported at the server level.

Al mover los datos de un servidor a un cliente, los controladores de cliente anteriores podrían no reconocer la intercalación del servidor.When you move data from a server to a client, your server collation might not be recognized by older client drivers. Esto puede ocurrir al mover los datos de un servidor Unicode a un cliente no Unicode.This can occur when you move data from a Unicode server to a non-Unicode client. La mejor opción podría ser actualizar el sistema operativo cliente para que las intercalaciones del sistema subyacentes se actualicen.Your best option might be to upgrade the client operating system so that the underlying system collations are updated. 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.If the client has database client software installed, you might consider applying a service update to the database client software.

Sugerencia

También puede intentar utilizar una intercalación diferente para los datos del servidor.You can also try to use a different collation for the data on the server. Elija una intercalación que se asigne a una página de códigos en el cliente.Choose a collation that maps to a code page on the client.

Si almacena datos de caracteres que reflejan varios idiomas en SQL ServerSQL Server (de SQL Server 2005 (9.x)SQL Server 2005 (9.x) a SQL Server 2017SQL Server 2017), use tipos de datos Unicode (nchar, nvarchar y ntext) en lugar de tipos de datos que no sean Unicode (char, varchar y text).If you store character data that reflects multiple languages in SQL ServerSQL Server (SQL Server 2005 (9.x)SQL Server 2005 (9.x) through SQL Server 2017SQL Server 2017), use Unicode data types (nchar, nvarchar, and ntext) instead of non-Unicode data types (char, varchar, and text).

Nota

Para los tipos de datos Unicode, Motor de base de datosDatabase Engine puede representar hasta 65 535 caracteres mediante UCS-2, o el intervalo completo de Unicode (1 114 111 caracteres) si se usan caracteres adicionales.For Unicode data types, the Motor de base de datosDatabase Engine can represent up to 65,535 characters using UCS-2, or the full Unicode range (‭1,114,111‬ characters) if supplementary characters are used. Para obtener más información sobre cómo habilitar caracteres adicionales, consulte Caracteres adicionales.For more information on enabling supplementary characters, see Supplementary Characters.

Como alternativa, a partir de SQL Server 2019SQL Server 2019, si se usa una intercalación compatible con UTF-8 (_UTF8), los tipos de datos anteriores que no son Unicode (char y varchar) se convierten en tipos de datos Unicode (UTF-8).Alternatively, starting with SQL Server 2019SQL Server 2019, if a UTF-8 enabled collation (_UTF8) is used, then previously non-Unicode data types (char and varchar) become Unicode (UTF-8) data types. SQL Server 2019SQL Server 2019 no cambia el comportamiento de tipos de datos Unicode (UTF-16) que existieran antes (nchar, nvarchar y ntext).does not change the behavior of previously existing Unicode (UTF-16) data types (nchar, nvarchar, and ntext). Consulte Diferencias de almacenamiento entre UTF-8 y UTF-16 para más información.See Storage differences between UTF-8 and UTF-16 for further details.

Para usar las intercalaciones UTF-16 disponibles en SQL ServerSQL Server (de SQL Server 2017SQL Server 2017 a _) a fin de mejorar la búsqueda y la ordenación de algunos caracteres Unicode (solo intercalaciones de Windows), puede seleccionar una de las intercalaciones de caracteres adicionales (SQL Server 2012 (11.x)SQL Server 2012 (11.x)SC) o una de las intercalaciones de la versión 140.To use the UTF-16 collations available in SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017) to improve searching and sorting of some Unicode characters (Windows collations only), you can select either one of the supplementary characters (_SC) collations or one of the version 140 collations.

Para usar las intercalaciones UTF- 8 disponibles en SQL Server 2019SQL Server 2019 a fin de mejorar la búsqueda y la ordenación de algunos caracteres Unicode (solo intercalaciones de Windows), debe seleccionar las intercalaciones compatibles con la codificación UTF-8 (_UTF8).To use the UTF-8 collations available in SQL Server 2019SQL Server 2019 to improve searching and sorting of some Unicode characters (Windows collations only), you must select UTF-8 encoding enabled collations(_UTF8).

  • La marca UTF8 se puede aplicar a:The UTF8 flag can be applied to:

    • Intercalaciones de la versión 90Version 90 collations

      Nota

      Solo en esta versión ya hay intercalaciones que reconocen los caracteres complementarios (_SC) o distinguen entre selector de variación (_VSS).Only when supplementary characters (_SC) or variation-selector-sensitive (_VSS) aware collations already exist in this version.

    • Intercalaciones de la versión 100Version 100 collations
    • Intercalaciones de la versión 140Version 140 collations
    • Intercalación binaria BIN21BIN21 binary collation
  • La marca UTF8 no se puede aplicar a:The UTF8 flag cannot be applied to:

    • Intercalaciones de la versión 90 que no son compatibles con caracteres adicionales (_SC) o la distinción de selector de variación (_VSS)Version 90 collations that don't support supplementary characters (_SC) or variation-selector-sensitive (_VSS)
    • Intercalaciones binarias BIN o BIN22The BIN or BIN22 binary collations
    • Intercalaciones SQL*The SQL* collations

1 A partir de SQL Server 2019SQL Server 2019 CTP 2.3.1 Starting with SQL Server 2019SQL Server 2019 CTP 2.3. SQL Server 2019SQL Server 2019 CTP 3.0 reemplazó la intercalación UTF8_BIN2 por Latin1_General_100_BIN2_UTF8.CTP 3.0 replaced collation UTF8_BIN2 with Latin1_General_100_BIN2_UTF8.
2 Hasta con SQL Server 2019SQL Server 2019 CTP 2.3.2 Up to with SQL Server 2019SQL Server 2019 CTP 2.3.

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.To evaluate issues that are related to using Unicode or non-Unicode data types, test your scenario to measure performance differences in your environment. 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.It is a good practice to standardize the collation that is used on systems across your organization, and deploy Unicode servers and clients wherever possible.

En muchos casos, SQL ServerSQL Server interactúa con otros servidores o clientes, y la organización podría usar varios estándares de acceso a datos entre las aplicaciones y las instancias de servidor.In many situations, SQL ServerSQL Server interacts with other servers or clients, and your organization might use multiple data access standards between applications and server instances. Los clientesSQL ServerSQL Server son uno de los dos tipos principales:SQL ServerSQL Server clients are one of two main types:

  • Clientes Unicode que usan OLE DB y Conectividad abierta de bases de datos (ODBC) versión 3.7 o posteriores.Unicode clients that use OLE DB and Open Database Connectivity (ODBC) version 3.7 or a later version.
  • Clientes no Unicode que usan DB-Library y ODBC versión 3.6 o anteriores.Non-Unicode clients that use DB-Library and ODBC version 3.6 or an earlier version.

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.The following table provides information about using multilingual data with various combinations of Unicode and non-Unicode servers.

ServidorServer ClienteClient Beneficios o limitacionesBenefits or Limitations
UnicodeUnicode UnicodeUnicode Dado que los datos Unicode se usan en todo el sistema, este escenario proporciona el máximo rendimiento y protección frente a daños de los datos recuperados.Because Unicode data is used throughout the system, this scenario provides the best performance and protection from corruption of retrieved data. Se trata de la situación de Objetos de datos ActiveX (ADO), OLE DB y ODBC versión 3.7 o posteriores.This is the situation with ActiveX Data Objects (ADO), OLE DB, and ODBC version 3.7 or a later version.
UnicodeUnicode No UnicodeNon-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 ServerSQL Servero un sistema operativo anterior, puede haber limitaciones o producirse errores al mover los datos a un equipo cliente.In this scenario, especially with connections between a server that is running a newer operating system and a client that is running an older version of SQL ServerSQL Server, or on an older operating system, there can be limitations or errors when you move data to a client computer. Los datos Unicode del servidor intentan asignarse a una página de códigos correspondiente en el cliente no Unicode para convertir los datos.Unicode data on the server tries to map to a corresponding code page on the non-Unicode client to convert the data.
No UnicodeNon-Unicode UnicodeUnicode No es una configuración ideal para utilizar datos multilingües.This is not an ideal configuration for using multilingual data. No puede escribir los datos Unicode en el servidor no Unicode.You cannot write Unicode data to the non-Unicode server. Es probable que se produzcan problemas si los datos se envían a servidores externos a la página de códigos del servidor.Problems are likely to occur when data is sent to servers that are outside the server's code page.
No UnicodeNon-Unicode No UnicodeNon-Unicode Se trata de un escenario muy limitado para datos multilingües.This is a very limiting scenario for multilingual data. Puede usar solo una única página de códigos.You can use only a single code page.

Caracteres complementariosSupplementary Characters

Unicode Consortium asigna a cada carácter un punto de código único, que es un valor en el intervalo comprendido entre 000000 y 10FFFF.The Unicode Consortium allocates each character a unique code point, which is a value in the range 000000 to 10FFFF. Los caracteres usados con más frecuencia tienen valores de punto de código en el intervalo comprendido entre 000000 y 00FFFF (65 535 caracteres) que se ajustan a una palabra de 8 o 16 bits en memoria y en disco.The most frequently used characters have code point values in the range 000000 to 00FFFF (65,535 characters) which fit into an 8-bit or 16-bit word in memory and on-disk. Este intervalo normalmente se designa como el plano multilingüe básico (BMP).This range is usually designated as the Basic Multilingual Plane (BMP).

Pero Unicode Consortium estableció 16 "planos" adicionales de caracteres, cada uno de ellos del mismo tamaño que el BMP.But the Unicode Consortium has established 16 additional "planes" of characters, each the same size as the BMP. Esta definición ofrece a Unicode la posibilidad de representar 1 114 112 caracteres Unicode (es decir, 216 * 17 caracteres) dentro del intervalo de puntos de código comprendido entre 000000 y 10FFFF.This definition allows Unicode the potential to represent 1,114,112 characters (that is, 216 * 17 characters) within the code point range 000000 to 10FFFF. Los caracteres con valores de punto de código mayores que 00FFFF requieren entre dos y cuatro palabras consecutivas de 8 bits (UTF-8) o dos palabras consecutivas de 16 bits (UTF-16).Characters with code point values larger than 00FFFF require two to four consecutive 8-bit words (UTF-8), or two consecutive 16-bit words (UTF-16). Estos caracteres ubicados más allá del BMP se denominan caracteres adicionales y las dos palabras consecutivas adicionales de 8 o 16 bits se denominan pares suplentes.These characters located beyond the BMP are called supplementary characters, and the additional consecutive 8-bit or 16-bit words are called surrogate pairs. Para obtener más información sobre los caracteres adicionales y los pares suplentes, consulte el estándar Unicode.For more details about supplementary characters, surrogates, and surrogate pairs, refer to the Unicode Standard.

SQL ServerSQL Server proporciona tipos de datos, como nchar y nvarchar para almacenar datos Unicode en el intervalo BMP (de 000000 a 00FFFF), que Motor de base de datosDatabase Engine codifica mediante UCS-2.provides data types such as nchar and nvarchar to store Unicode data in the BMP range (000000 to 00FFFF), which the Motor de base de datosDatabase Engine encodes using UCS-2.

SQL Server 2012 (11.x)SQL Server 2012 (11.x) introdujo una nueva familia de intercalaciones de caracteres adicionales (_SC) que se pueden usar con los tipos de datos nchar, nvarchar, y sql_variant para representar el intervalo de caracteres Unicode (de 000000 a 10FFFF) completo.introduced a new family of supplementary character (_SC) collations that can be used with the data types nchar, nvarchar, and sql_variant to represent the full Unicode character range (000000 to 10FFFF). Por ejemplo: Latin1_General_100_CI_AS_SCo Japanese_Bushu_Kakusu_100_CI_AS_SCsi usa una intercalación japonesa.For example: Latin1_General_100_CI_AS_SC, or if using a Japanese collation, Japanese_Bushu_Kakusu_100_CI_AS_SC.

SQL Server 2019SQL Server 2019 amplía la compatibilidad de los caracteres adicionales a los tipos de datos char y varchar con las nuevas intercalaciones habilitadas para UTF-8 (_UTF8).extends supplementary character support to the data types char and varchar with the new UTF-8 enabled collations (_UTF8). Estos tipos también son capaces de representar el intervalo completo de caracteres Unicode.These are also capable of representing the full Unicode character range.

Nota

A partir de SQL Server 2014 (12.x)SQL Server 2014 (12.x), las nuevas _140 intercalaciones admiten automáticamente caracteres adicionales.Starting in SQL Server 2014 (12.x)SQL Server 2014 (12.x), all new _140 collations automatically support supplementary characters.

Si utiliza caracteres adicionales:If you use supplementary characters:

  • Los caracteres adicionales se pueden utilizar en las operaciones de ordenación y comparación en las versiones de intercalación 90 o mayores.Supplementary characters can be used in ordering and comparison operations in collation versions 90 or greater.

  • Todas las intercalaciones de la versión 100 admiten la ordenación lingüística con caracteres adicionales.All version 100 collations support linguistic sorting with supplementary characters.

  • Los caracteres adicionales no son compatibles con metadatos, como nombres de objetos de base de datos.Supplementary characters are not supported for use in metadata, such as in names of database objects.

  • Las bases de datos que usan intercalaciones con caracteres adicionales (_SC), no se pueden habilitar para la replicación de SQL ServerSQL Server.Databases that use collations with supplementary characters (_SC), cannot be enabled for SQL ServerSQL Server Replication. El motivo es que algunas de las tablas del sistema y procedimientos almacenados que se crean para la replicación usan el tipo de datos ntext heredado, que no admite caracteres adicionales.This is because some of the system tables and stored procedures that are created for replication, use the legacy ntext data type, which does not support supplementary characters.

  • La marca SC se puede aplicar a:The SC flag can be applied to:

    • Intercalaciones de la versión 90Version 90 collations
    • Intercalaciones de la versión 100Version 100 collations
  • La marca SC no se puede aplicar a:The SC flag cannot be applied to:

    • Intercalaciones de Windows sin versión de la versión 80Version 80 non-versioned Windows collations
    • Intercalaciones binarias BIN o BIN2The BIN or BIN2 binary collations
    • Intercalaciones SQL*The SQL* collations
    • Intercalaciones de la versión 140 (estas no necesitan la marca SC, dado que ya admiten caracteres adicionales)Version 140 collations (these don't need the SC flag as they already support supplementary characters)

En la siguiente tabla se compara el comportamiento de algunas funciones de cadena y algunos operadores de cadena cuando usan caracteres adicionales con y sin intercalación de caracteres adicionales (SCA):The following table compares the behavior of some string functions and string operators when they use supplementary characters with and without a supplementary character-aware (SCA) collation:

Función u operador de cadenaString Function or Operator Con intercalación de caracteres adicionales (SCA)With a Supplementary Character-Aware (SCA) Collation Sin intercalación SCAWithout an SCA Collation
CHARINDEXCHARINDEX

LENLEN

PATINDEXPATINDEX
El par suplente de UTF-16 se cuenta como un solo punto de código.The UTF-16 surrogate pair is counted as a single codepoint. El par suplente de UTF-16 se cuenta como dos puntos de código.The UTF-16 surrogate pair is counted as two codepoints.
LEFTLEFT

REPLACEREPLACE

REVERSEREVERSE

RIGHTRIGHT

SUBSTRINGSUBSTRING

STUFFSTUFF
Estas funciones tratan los pares suplentes como un solo punto de código y funcionan de la forma esperada.These functions treat each surrogate pair as a single codepoint and work as expected. Estas funciones pueden dividir cualquier par suplente y provocar resultados inesperados.These functions may split any surrogate pairs and lead to unexpected results.
NCHARNCHAR Devuelve el carácter correspondiente al valor del punto de código Unicode especificado en el intervalo comprendido entre 0 y 0x10FFFF.Returns the character corresponding to the specified Unicode codepoint value in the range 0 to 0x10FFFF. Si el valor especificado está en el intervalo comprendido entre 0 y 0xFFFF, solo se devuelve un carácter.If the value specified lies in the range 0 through 0xFFFF, one character is returned. Con valores más altos, se devuelve el suplente correspondiente.For higher values, the corresponding surrogate is returned. Un valor mayor que 0xFFFF devuelve NULL en vez del suplente correspondiente.A value higher than 0xFFFF returns NULL instead of the corresponding surrogate.
UNICODEUNICODE Devuelve un punto de código UTF-16 en el intervalo comprendido entre 0 y 0x10FFFF.Returns a UTF-16 codepoint in the range 0 through 0x10FFFF. Devuelve un punto de código UCS-2 en el intervalo comprendido entre 0 y 0xFFFF.Returns a UCS-2 codepoint in the range 0 through 0xFFFF.
Hacer coincidir un carácter comodínMatch One Character Wildcard

Carácter comodín - caracteres no coincidentesWildcard - Character(s) Not to Match
Se admiten caracteres adicionales para todas las operaciones de caracteres comodín.Supplementary characters are supported for all wildcard operations. No se admiten caracteres adicionales para estas operaciones de caracteres comodín.Supplementary characters are not supported for these wildcard operations. Se admiten otros operadores de caracteres comodín.Other wildcard operators are supported.

Compatibilidad con GB18030GB18030 Support

GB18030 es un estándar independiente que se usa en la República Popular China para codificar caracteres chinos.GB18030 is a separate standard used in the People's Republic of China for encoding Chinese characters. En GB18030, los caracteres pueden tener una longitud de 1, 2 o 4 bytes.In GB18030, characters can be 1, 2, or 4 bytes in length. SQL ServerSQL 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.provides support for GB18030-encoded characters by recognizing them when they enter the server from a client-side application and converting and storing them natively as Unicode characters. Una vez almacenados en el servidor, se tratan como caracteres Unicode en las operaciones siguientes.After they are stored in the server, they are treated as Unicode characters in any subsequent operations. Puede usar cualquier intercalación china, preferentemente la más reciente: la versión 100.You can use any Chinese collation, preferably the latest 100 version. Todas las intercalaciones de nivel _100 admiten la ordenación lingüística con caracteres GB18030.All _100 level collations support linguistic sorting with GB18030 characters. Si los datos incluyen caracteres suplementarios (pares suplentes), puede usar las intercalaciones SC disponibles en SQL Server 2017SQL Server 2017 para mejorar la búsqueda y la clasificación.If the data includes supplementary characters (surrogate pairs), you can use the SC collations available in SQL Server 2017SQL Server 2017 to improve searching and sorting.

Compatibilidad con escritura complejaComplex Script Support

SQL ServerSQL Server puede admitir la entrada, el almacenamiento, el cambio, y la visualización de escrituras complejas.can support inputting, storing, changing, and displaying complex scripts. Entre los ejemplos de escritura compleja se encuentran los siguientes tipos:Complex scripts include the following types:

  • 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.Scripts that include the combination of both right-to-left and left-to-right text, such as a combination of Arabic and English text.
  • 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.Scripts whose characters change shape depending on their position, or when combined with other characters, such as Arabic, Indic, and Thai characters.
  • Idiomas como el tailandés que necesitan diccionarios internos para reconocer palabras porque no existen cortes entre ellas.Languages such as Thai that require internal dictionaries to recognize words because there are no breaks between them.

Las aplicaciones de base de datos que interactúan con SQL ServerSQL Server deben utilizar controles que sean compatibles con escritura compleja.Database applications that interact with SQL ServerSQL Server must use controls that support complex scripts. Los controles de formato estándar de Windows creados en código administrado están habilitados para escritura compleja.Standard Windows form controls that are created in managed code are complex script-enabled.

Intercalaciones japonesas agregadas en SQL Server 2017 (14.x)SQL Server 2017 (14.x)Japanese Collations added in SQL Server 2017 (14.x)SQL Server 2017 (14.x)

A partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x), se admiten nuevas familias de intercalaciones japonesas, con las permutaciones de varias opciones (_CS, _AS, _KS, _WS, _VSS).Starting in SQL Server 2017 (14.x)SQL Server 2017 (14.x), new Japanese collation families are supported, with the permutations of various options (_CS, _AS, _KS, _WS, _VSS).

Para escuchar en estas intercalaciones, puede consultar Motor de base de datos de SQL ServerSQL Server Database Engine:To list these collations, you can query the Motor de base de datos de SQL ServerSQL Server Database Engine:

SELECT Name, Description FROM fn_helpcollations()  
WHERE Name LIKE 'Japanese_Bushu_Kakusu_140%' OR Name LIKE 'Japanese_XJIS_140%'

Todas las nuevas intercalaciones tienen compatibilidad integrada con los caracteres adicionales, por lo que ninguna de las _140 nuevas intercalaciones tienen (o necesitan) la marca SC.All of the new collations have built-in support for supplementary characters, so none of the new _140 collations have (or need) the SC flag.

Estas intercalaciones se admiten en los índices, las tablas optimizadas para memoria, los índices de almacén de columnas y los módulos compilados de forma nativa de Motor de base de datosDatabase Engine.These collations are supported in Motor de base de datosDatabase Engine indexes, memory-optimized tables, columnstore indexes, and natively compiled modules.

Compatibilidad con UTF-8UTF-8 support

SQL Server 2019SQL Server 2019 presenta compatibilidad total con la codificación de caracteres UTF-8 ampliamente utilizada como codificación de importación o exportación, y como intercalación de columna o base de datos para los datos de cadena.introduces full support for the widely used UTF-8 character encoding as an import or export encoding, and as database-level or column-level collation for string data. UTF-8 se permite en los tipos de datos char y varchar, y se habilita al crear o cambiar la intercalación de un objeto a una intercalación con el sufijo UTF8.UTF-8 is allowed in the char and varchar data types, and is enabled when creating or changing an object's collation to a collation with the UTF8 suffix. Por ejemplo, de LATIN1_GENERAL_100_CI_AS_SC a LATIN1_GENERAL_100_CI_AS_SC_UTF8.For example,LATIN1_GENERAL_100_CI_AS_SC to LATIN1_GENERAL_100_CI_AS_SC_UTF8.

UTF-8 solo está disponible para las intercalaciones de Windows que admiten caracteres adicionales, tal y como se presentó en SQL Server 2012 (11.x)SQL Server 2012 (11.x).UTF-8 is only available to Windows collations that support supplementary characters, as introduced in SQL Server 2012 (11.x)SQL Server 2012 (11.x). nchar y nvarchar permiten solo codificación UCS-2 o UTF-16 y permanecen sin cambios.nchar and nvarchar allow UCS-2 or UTF-16 encoding only, and remain unchanged.

Diferencias de almacenamiento entre UTF-8 y UTF-16Storage differences between UTF-8 and UTF-16

Unicode Consortium asigna a cada carácter un punto de código único, que es un valor en el intervalo comprendido entre 000000 y 10FFFF.The Unicode Consortium allocates each character a unique codepoint, which is a value in the range 000000 to 10FFFF. Con SQL Server 2019SQL Server 2019, ambas codificaciones, UTF-8 y UTF-16, están disponibles para representar el intervalo completo:With SQL Server 2019SQL Server 2019, both UTF-8 and UTF-16 encodings are available to represent the full range:

  • Con la codificación UTF-8, los caracteres del intervalo ASCII (000000 – 00007F) requieren 1 byte, los puntos de código de 000080 a 0007FF requieren 2 bytes, los puntos de código de 000800 a 00FFFF requieren 3 bytes y los puntos de código de 0010000 a 0010FFFF requieren 4 bytes.With UTF-8 encoding, characters in the ASCII range (000000 – 00007F) require 1 byte, code points 000080 to 0007FF require 2 bytes, code points 000800 to 00FFFF require 3 bytes, and code points 0010000 to 0010FFFF require 4 bytes.
  • Con la codificación UTF-16, los puntos del código de 000000 a 00FFFF requieren 2 bytes y los puntos de código de 0010000 a 0010FFFF requieren 4 bytes.With UTF-16 encoding, code points 000000 to 00FFFF require 2 bytes, and code points 0010000 to 0010FFFF require 4 bytes.

En la tabla siguiente se describen los bytes de almacenamiento de la codificación para cada intervalo de caracteres y tipo de codificación:The following table outlines the encoding storage bytes for each character range and encoding type:

Intervalo de códigos (hexadecimal)Code Range (hexadecimal) Intervalo de códigos (decimal)Code Range (decimal) Bytes de almacenamiento 1 con UTF-8Storage bytes 1 with UTF-8 Bytes de almacenamiento 1 con UTF-16Storage bytes 1 with UTF-16
000000 – 00007F000000 – 00007F 0 - 1270 - 127 11 22
000080 - 00009F000080 – 00009F
0000A0 - 0003FF0000A0 – 0003FF
000400 - 0007FF000400 – 0007FF
128 - 159128 – 159
160 - 1023160 – 1,023
1024 - 20471,024 – 2,047
22 22
000800 - 003FFF000800 – 003FFF
004000 - 00FFFF004000 – 00FFFF
2048 - 16 3832,048 - 16,383
16 384 - 65 53516,384 – 65,535
33 22
010000 - 03FFFF 2010000 – 03FFFF 2

040000 - 10FFFF 2040000 – 10FFFF 2
65 536 - 262 143 265,536 – 262,143 2

262 144 - 1 114 111 2262,144 – 1,114,111 2
44 44

1 Los bytes de almacenamiento hacen referencia a la longitud de bytes codificados, no al tamaño en disco del tipo de datos correspondiente.1 The storage bytes refer to the encoded byte length, not the respective data type on-disk storage size. Para obtener más información acerca de los tamaños de almacenamiento en disco, consulte nchar y nvarchar y char y varchar.For more information about on-disk storage sizes, see nchar and nvarchar and char and varchar.

2 Intervalo de puntos de código para caracteres adicionales.2 Code point range for supplementary characters.

Sugerencia

Una idea habitual es pensar que en CHAR(n) y VARCHAR(n), o en NCHAR(n) y NVARCHAR(n), la n define el número de caracteres.It is common to think in CHAR(n) and VARCHAR(n), or in NCHAR(n) and NVARCHAR(n), the n defines the number of characters. Esto se debe a que en el ejemplo de una columna CHAR(10), se pueden almacenar 10 caracteres ASCII en el intervalo 0-127 mediante una intercalación como Latin1_General_100_CI_AI, porque cada carácter de este intervalo solo usa 1 byte.This is because in the example of a CHAR(10) column, 10 ASCII characters in the range 0-127 can be stored using a collation such as Latin1_General_100_CI_AI, because each character in this range uses only 1-byte.
Sin embargo, en CHAR(n) y VARCHAR(n), la n define el tamaño de la cadena en bytes (0-8000), mientras que en NCHAR(n) y NVARCHAR(n) la n define el tamaño de la cadena en pares de bytes (0-4000).However, in CHAR(n) and VARCHAR(n), the n defines the string size in bytes (0-8,000), while in NCHAR(n) and NVARCHAR(n) the n defines the string size in byte-pairs (0-4,000). n nunca define números de caracteres que se pueden almacenar.n never defines numbers of characters that can be stored.

Como hemos visto anteriormente, elegir la codificación Unicode y el tipo de datos adecuado puede proporcionar ahorros significativos de almacenamiento o aumentar la superficie de memoria, según el juego de caracteres en uso.As seen above, choosing the appropriate Unicode encoding and data type may provide significant storage savings or increase your current storage footprint, depending on the character set in use. Por ejemplo, al usar una intercalación Latina habilitada para UTF-8, como Latin1_General_100_CI_AI_SC_UTF8, una columna CHAR(10) almacena 10 bytes y puede contener 10 caracteres ASCII en el intervalo 0-127, pero solo 5 caracteres en el intervalo 128-2047 y solo 3 caracteres en el intervalo 2048-65535.For example, When using a Latin collation that is UTF-8 enabled such as Latin1_General_100_CI_AI_SC_UTF8, a CHAR(10) column stores 10 bytes, and can hold 10 ASCII characters in the range 0-127, but only 5 characters in range 128-2047, and only 3 characters in range 2048-65535. Por comparación, dado que una columna NCHAR(10) almacena 10 pares de bytes (20 bytes), puede contener 10 caracteres en el intervalo 0-65535.By comparison, because a NCHAR(10) column stores 10 byte-pairs (20 bytes), it can hold 10 characters in the range 0-65535.

Antes de decidir si utilizar la codificación UTF-8 o UTF-16 para una base de datos o una columna, tenga en cuenta la distribución de datos de cadena que se almacenarán:Before choosing whether to use UTF-8 or UTF-16 encoding for a database or column, consider the distribution of string data that will be stored:

  • Si se encuentra principalmente en el intervalo ASCII 0-127 (por ejemplo, inglés), cada carácter requiere 1 byte con UTF-8 y 2 bytes con UTF-16.If it is mostly in the ASCII range 0-127 (such as English), then each character requires 1-byte with UTF-8 and 2-bytes with UTF-16. El uso de UTF-8 ofrece ventajas de almacenamiento.Using UTF-8 provides storage benefits. Si se cambia un tipo de datos de columna existente con caracteres ASCII en el intervalo 0-127 de NCHAR(10) a CHAR(10) mediante una intercalación habilitada para UTF-8, esto se traduce en una reducción a la mitad de los requisitos de almacenamiento.Changing an existing column data type with ASCII characters in the range 0-127 from NCHAR(10) to CHAR(10) using an UTF-8 enabled collation, translates into 50 percent reduction in storage requirements. Esta reducción se debe a que NCHAR(10) requiere 20 bytes para el almacenamiento, mientras que CHAR(10) necesita 10 bytes para la misma cadena Unicode.This reduction is because NCHAR(10) requires 20 bytes for storage, whereas CHAR(10) requires 10 bytes for the same Unicode string representation.
  • Por encima del intervalo ASCII, casi todos los scripts basados en el alfabeto latino y también griego, cirílico, copto, armenio, hebreo, árabe, sitio, Tāna y n'ko requerirán 2 bytes por carácter tanto en UTF-8 como en UTF-16.Above the ASCII range, almost all Latin-based script, and also Greek, Cyrillic, Coptic, Armenian, Hebrew, Arabic, Syriac, Tāna and N’Ko will require 2-bytes per character in both UTF-8 and UTF-16. En estos casos no existen diferencias de almacenamiento importantes con tipos de datos comparables (por ejemplo, entre el uso de char o nchar).In these cases there aren't significant storage differences for comparable data types (for example between using char or nchar).
  • Si los scripts son principalmente de idiomas asiáticos (por ejemplo, coreano, chino y japonés), cada carácter requiere 3 bytes con UTF-8 y 2 con UTF-16.If it is mostly East Asian script (such as Korean, Chinese and Japanese), then each character requires 3-bytes with UTF-8 and 2-bytes with UTF-16. El uso de UTF-16 ofrece ventajas de almacenamiento.Using UTF-16 provides storage benefits.
  • Los caracteres del intervalo comprendido entre 010000 y 10FFFF requieren 4 bytes en UTF-8 y UTF-16.Characters in the 010000 to 10FFFF range require 4-bytes in both UTF-8 and UTF-16. En estos casos, no existen diferencias en el almacenamiento con tipos de datos comparables (por ejemplo, entre usar char o nchar).In these cases there aren't storage differences for comparable data types (for example between using char or nchar).

Para otras consideraciones, consulte Escribir instrucciones Transact-SQL internacionales.For other considerations, see Write International Transact-SQL Statements.

TareaTask TemaTopic
Describe cómo establecer o cambiar la intercalación de la instancia de SQL Server.Describes how to set or change the collation of the instance of SQL Server. Configurar o cambiar la intercalación del servidorSet or Change the Server Collation
Describe cómo establecer o cambiar la intercalación de una base de datos de usuario.Describes how to set or change the collation of a user database. Establecer o cambiar la intercalación de base de datosSet or Change the Database Collation
Describe cómo establecer o cambiar la intercalación de una columna de la base de datos.Describes how to set or change the collation of a column in the database. Establecer o cambiar la intercalación de columnasSet or Change the Column Collation
Describe cómo devolver información de intercalación en el servidor, la base de datos, o el nivel de columna.Describes how to return collation information at the server, database, or column level. Ver información de intercalaciónView Collation Information
Describe cómo escribir instrucciones Transact-SQL que sean más portátiles de un idioma a otro, o que admitan varios idiomas más fácilmente.Describes how to write Transact-SQL statements that are more portable from one language to another, or support multiple languages more easily. Escribir instrucciones Transact-SQL internacionalesWrite International Transact-SQL Statements
Describe cómo cambiar el idioma de la sesión permite cambiar el idioma de los mensajes de error y las preferencias acerca de cómo usar y mostrar los datos de fecha, hora y divisa.Describes how to change the language of error messages and preferences for how date, time, and currency data are used and displayed. Establecer un idioma de la sesiónSet a Session Language

Prácticas recomendadas para cambiar las intercalaciones en SQL Server SQL Server Best Practices Collation Change
Usar el formato de caracteres Unicode para importar o exportar datos (SQL Server) Use Unicode Character Format to Import or Export Data (SQL Server)
Escribir instrucciones Transact-SQL internacionales Write International Transact-SQL Statements
"Migración de las prácticas recomendadas de SQL Server a Unicode" - Ya no se mantiene"SQL Server Best Practices Migration to Unicode" - No longer maintained
Sitio web de Unicode Consortium Unicode Consortium Web site
Unicode estándar Unicode Standard
Compatibilidad de UTF-8 con el controlador OLE DB para SQL ServerUTF-8 Support in OLE DB Driver for SQL Server
Blog Introducing UTF-8 support for SQL Server (Presentación de la compatibilidad de UTF-8 con SQL Server)Blog Introducing UTF-8 support for SQL Server

Consulte tambiénSee Also

Intercalaciones de bases de datos independientes Contained Database Collations
Elegir un idioma al crear un índice de texto completo Choose a Language When Creating a Full-Text Index
sys.fn_helpcollations (Transact-SQL)sys.fn_helpcollations (Transact-SQL)