Suporte a ordenações e a UnicodeCollation and Unicode Support

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure simSQL Data Warehouse do Azure simParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

As ordenações em SQL ServerSQL Server fornecem propriedades de regras de classificação, de diferenciação de maiúsculas e minúsculas e de diferenciação de acentos para seus dados.Collations in SQL ServerSQL Server provide sorting rules, case, and accent sensitivity properties for your data. As ordenações utilizadas com tipos de dados de caractere, como char e varchar, determinam a página de código e os caracteres correspondentes que podem ser representados para o tipo de dados em questão.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. Independentemente de você estar instalando uma nova instância do SQL ServerSQL Server, restaurando um backup de banco de dados ou conectando o servidor a bancos de dados cliente, é importante estar ciente dos requisitos de localidade, ordem de classificação e distinção de maiúsculas e minúsculas e de acentos dos dados com os quais está trabalhando.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 listar as ordenações disponíveis na instância do SQL ServerSQL Server, veja sys.fn_helpcollations (Transact-SQL).To list the collations available on your instance of SQL ServerSQL Server, see sys.fn_helpcollations (Transact-SQL).

Ao selecionar uma ordenação para o servidor, banco de dados, coluna ou expressão, você atribui determinadas características a seus dados que afetam os resultados de muitas operações no banco de dados.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 exemplo, ao construir uma consulta usando ORDER BY, a ordem de classificação de seu conjunto de resultados pode depender da ordenação aplicada ao banco de dados ou ditada em uma cláusula COLLATE no nível de expressão da 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 usar o suporte a ordenações do SQL ServerSQL Server da melhor maneira possível, você deve estar ciente dos termos definidos neste tópico e de como eles estão relacionados às características de seus dados.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.

Condições da ordenaçãoCollation Terms

OrdenaçãoCollation

Uma ordenação especifica os padrões de bit que representam cada caractere em um conjunto de dados.A collation specifies the bit patterns that represent each character in a data set. As ordenações também determinam as regras que classificam e comparam dados.Collations also determine the rules that sort and compare data. SQL ServerSQL Server dá suporte ao armazenamento de objetos com ordenações diferentes em um banco de dados individual.supports storing objects that have different collations in a single database. Para colunas não Unicode, a configuração de ordenação especifica a página de códigos dos dados e quais caracteres podem ser representados.For non-Unicode columns, the collation setting specifies the code page for the data and which characters can be represented. Os dados movidos entre colunas não Unicode devem ser convertidos da página de código de origem para a página de código de destino.Data that is moved between non-Unicode columns must be converted from the source code page to the destination code page.

Os resultados da instrução Transact-SQLTransact-SQL podem variar quando a instrução for executada no contexto de diferentes bancos de dados que tenham configurações de ordenação diferentes.Transact-SQLTransact-SQL statement results can vary when the statement is run in the context of different databases that have different collation settings. Se possível, use uma ordenação padronizada para sua organização.If it is possible, use a standardized collation for your organization. Deste modo, não será preciso especificar a ordenação explicitamente em todo caractere ou expressão Unicode.This way, you do not have to explicitly specify the collation in every character or Unicode expression. Se você deve trabalhar com objetos que tenham configurações de ordenação e página de códigos diferentes, codifique suas consultas para considerar as regras da precedência de ordenação.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 obter mais informações, consulte Precedência de ordenação (Transact-SQL).For more information, see Collation Precedence (Transact-SQL).

As opções associadas a uma ordenação fazem distinção de maiúsculas e minúsculas, de acentos, de caracteres Kana, de largura e de seletor de variação.The options associated with a collation are case sensitivity, accent sensitivity, Kana-sensitivity, width sensitivity, variation-selector-sensitivity. O SQL Server 2019SQL Server 2019 introduz uma opção adicional para codificação UTF-8.SQL Server 2019SQL Server 2019 introduces an additional option for UTF-8 encoding. Estas opções são especificadas através de sua anexação ao nome de ordenação.These options are specified by appending them to the collation name. Por exemplo, esta ordenação Japanese_Bushu_Kakusu_100_CS_AS_KS_WS_UTF8 tem diferenciação de maiúsculas e minúsculas, de acentos, de caracteres Kana e de largura e é codificado em 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. Como outro exemplo, essa ordenação Japanese_Bushu_Kakusu_140_CI_AI_KS_WS_VSS não diferencia maiúsculas de minúsculas, não diferencia acentos, mas faz distinção de caracteres Kana, de largura e de seletor de variação e usa codificação não 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. A tabela a seguir descreve o comportamento associado com estas diversas opções.The following table describes the behavior associated with these various options.

OpçãoOption DescriçãoDescription
Diferenciar maiúsculas de minúsculas (_CS)Case-sensitive (_CS) Faz distinção entre letras maiúscula e minúsculas.Distinguishes between uppercase and lowercase letters. Se selecionada, as letras minúsculas são ordenadas à frente das versões em letras maiúsculas.If selected, lowercase letters sort ahead of their uppercase versions. Se esta opção não for selecionada, a ordenação não fará diferenciação de maiúsculas e minúsculas.If this option is not selected, the collation is case-insensitive. Ou seja, o SQL ServerSQL Server considera as versões de letras maiúsculas e minúsculas como idênticas para fins de classificação.That is, SQL ServerSQL Server considers the uppercase and lowercase versions of letters to be identical for sorting purposes. Você pode selecionar explicitamente a não diferenciação de maiúsculas e minúsculas, especificando _CI.You can explicitly select case insensitivity by specifying _CI.
Diferenciar acentos (_AS)Accent-sensitive (_AS) Faz distinção entre caracteres acentuados e não acentuados.Distinguishes between accented and unaccented characters. Por exemplo, 'a' não é igual a 'ã'.For example, 'a' is not equal to 'ấ'. Se esta opção não for selecionada, a ordenação não fará diferenciação de acentos.If this option is not selected, the collation is accent-insensitive. Ou seja, o SQL ServerSQL Server considera as versões com e sem acentos como idênticas para fins de classificação.That is, SQL ServerSQL Server considers the accented and unaccented versions of letters to be identical for sorting purposes. Você pode selecionar explicitamente a não diferenciação de acentos, especificando _AI.You can explicitly select accent insensitivity by specifying _AI.
Diferenciar caracteres Kana (_KS)Kana-sensitive (_KS) Distingue entre os dois tipos de caracteres kana japoneses: hiragana e katakana.Distinguishes between the two types of Japanese kana characters: Hiragana and Katakana. Se esta opção não for selecionada, a ordenação não fará diferenciação de Kana.If this option is not selected, the collation is Kana-insensitive. Ou seja, o SQL ServerSQL Server considera que caracteres hiragana e katakana são iguais para fins de classificação.That is, SQL ServerSQL Server considers Hiragana and Katakana characters to be equal for sorting purposes. A omissão desta opção é o único método de especificar a não diferenciação de Kana.Omitting this option is the only method of specifying Kana-insensitivity.
Diferenciar largura (_WS)Width-sensitive (_WS) Faz distinção entre caracteres de largura inteira e de meia largura.Distinguishes between full-width and half-width characters. Se esta opção não for selecionada, o SQL ServerSQL Server considerará as representações de largura inteira e de meia largura do mesmo caractere como iguais para fins de classificação.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. A omissão desta opção é o único método de especificar a não diferenciação de largura.Omitting this option is the only method of specifying width-insensitivity.
Distinção de seletor de variação (_VSS)Variation-selector-sensitive (_VSS) Distingue entre vários seletores de variação ideográficos em ordenações em japonês Japanese_Bushu_Kakusu_140 e Japanese_XJIS_140 introduzido primeiro em 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). Uma sequência de variação consiste em um caractere base e um seletor de variação adicional.A variation sequence consists of a base character plus an additional variation selector. Se essa opção _VSS não for selecionada, a ordenação não fará distinção de seletor de variação e o seletor de variação não será considerado na comparação.If this _VSS option is not selected, the collation is variation selector insensitive, and the variation selector is not considered in the comparison. Ou seja, o SQL Server considera caracteres criados sobre o mesmo caractere base com diferenciação de seletores de variação para serem idênticos com a finalidade de classificação.That is, SQL Server considers characters built upon the same base character with differing variation selectors to be identical for sorting purposes. Consulte também Unicode Ideographic Variation Database(Banco de dados de variação ideográfica Unicode).See also Unicode Ideographic Variation Database.

Não há suporte para ordenações de Diferenciação do seletor de variação (_VSS) em índices de pesquisa de Texto Completo.Variation selector sensitive (_VSS) collations are not supported in Full-text search indexes. Índices de pesquisa de texto completo dão suporte apenas às opções Diferenciação de Acentos (_AS), Diferenciação de caracteres Kana (_KS) e Diferenciação de largura (_WS).Full-text search indexes support only Accent-Sensitive (_AS), Kana-sensitive (_KS), and Width-sensitive (_WS) options. Os mecanismos de XML e CLR do SQL Server não dão suporte a Seletores de variação (_VSS).SQL Server XML and CLR engines do not support (_VSS) Variation selectors.
UTF-8 (_UTF8)UTF-8 (_UTF8) Permite que dados codificados em UTF-8 sejam armazenados no SQL ServerSQL Server.Enables UTF-8 encoded data to be stored in SQL ServerSQL Server. Se essa opção não for selecionada, o SQL ServerSQL Server usará o formato de codificação não Unicode padrão para os tipos de dados aplicáveis.If this option is not selected, SQL ServerSQL Server uses the default non-Unicode encoding format for the applicable data types.

O SQL ServerSQL Server oferece suporte aos seguintes conjuntos de ordenação:SQL ServerSQL Server supports the following collation sets:

ordenações do WindowsWindows collations

As ordenações do Windows definem regras para o armazenamento de dados de caractere baseadas em uma localidade de sistema do Windows associada.Windows collations define rules for storing character data that are based on an associated Windows system locale. No caso de uma ordenação do Windows, a comparação de dados não Unicode é implementada usando o mesmo algoritmo que os dados Unicode.For a Windows collation, comparison of non-Unicode data is implemented by using the same algorithm as Unicode data. As regras de base de ordenações do Windows especificam qual alfabeto ou idioma será usado quando a classificação de dicionário for aplicada, bem como a página de código usada para armazenar dados de caracteres não 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. As classificações Unicode e não Unicode são compatíveis com comparações de cadeias de caracteres em uma versão específica do Windows.Both Unicode and non-Unicode sorting are compatible with string comparisons in a particular version of Windows. Isso proporciona consistência entre os tipos de dados no SQL ServerSQL Server e também permite que os desenvolvedores classifiquem as cadeias de caracteres nos aplicativos usando as mesmas regras utilizadas pelo 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 obter mais informações, veja Nome de ordenação do Windows (Transact-SQL).For more information, see Windows Collation Name (Transact-SQL).

Ordenações primáriasBinary collations

Os dados classificados de ordenações primárias na sequência de valores codificados definidos pelo tipo de localidade e dados.Binary collations sort data based on the sequence of coded values that are defined by the locale and data type. Eles fazem diferenciação de maiúsculas e minúsculas.They are case sensitive. Uma ordenação primária no SQL ServerSQL Server define a localidade e a página de código ANSI que são usadas.A binary collation in SQL ServerSQL Server defines the locale and the ANSI code page that is used. Isso impõe uma ordem de classificação binária.This enforces a binary sort order. Como são relativamente simples, as ordenações primárias ajudam melhorar o desempenho de aplicativo.Because they are relatively simple, binary collations help improve application performance. Para tipos de dados não Unicode, as comparações de dados têm como base os pontos de código definidos na página de código ANSI.For non-Unicode data types, data comparisons are based on the code points that are defined in the ANSI code page. Para tipos de dados Unicode, as comparações de dados têm como base os pontos de código Unicode.For Unicode data types, data comparisons are based on the Unicode code points. Para ordenações primárias em tipos de dados Unicode, a localidade não é considerada em classificações de dados.For binary collations on Unicode data types, the locale is not considered in data sorts. Por exemplo, Latin_1_General_BIN e Japanese_BIN geram resultados de classificação idênticos quando usados em dados Unicode.For example, Latin_1_General_BIN and Japanese_BIN yield identical sorting results when they are used on Unicode data.

Existem dois tipos de ordenações primárias no SQL ServerSQL Server: as ordenações BIN mais antigas e as ordenações BIN2 mais novas.There are two types of binary collations in SQL ServerSQL Server; the older BIN collations and the newer BIN2 collations. Em uma ordenação BIN2, todos os caracteres são classificados de acordo com seus pontos de código.In a BIN2 collation all characters are sorted according to their code points. Em uma ordenação BIN, apenas o primeiro caractere é classificado de acordo com o ponto de código e os caracteres restantes são classificados de acordo com seus 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. (Como a plataforma Intel é um arquitetura little endian, os caracteres de código Unicode são sempre trocados por bytes armazenados.)(Because the Intel platform is a little endian architecture, Unicode code characters are always stored byte-swapped.)

ordenações do SQL ServerSQL Server collations

Os agrupamentos (SQL_*) do SQL ServerSQL Server oferecem compatibilidade de ordem de classificação com versões anteriores do SQL ServerSQL Server.SQL ServerSQL Server collations (SQL_*) provide sort order compatibility with earlier versions of SQL ServerSQL Server. As regras de classificação de dicionário para dados não Unicode são incompatíveis com rotinas de classificação fornecidas pelos sistemas operacionais Windows.The dictionary sorting rules for non-Unicode data are incompatible with any sorting routine that is provided by Windows operating systems. No entanto, a classificação de dados Unicode é compatível com uma versão específica das regras de classificação do Windows.However, sorting Unicode data is compatible with a particular version of Windows sorting rules. Como as ordenações do SQL ServerSQL Server usam regras de comparação diferentes para dados não Unicode e Unicode, você vê resultados diferentes para comparações dos mesmos dados, dependendo do tipo de dados subjacente.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 obter mais informações, veja Nome de ordenação do SQL Server (Transact-SQL).For more information, see SQL Server Collation Name (Transact-SQL).

Observação

Quando você atualiza uma instância em português do SQL ServerSQL Server, os agrupamentos (SQL_*) do SQL ServerSQL Server podem ser especificados para compatibilidade com instâncias existentes do 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 a ordenação padrão de uma instância do SQL ServerSQL Server é definida durante a instalação, é importante especificar as configurações de ordenação com cuidado quando as seguintes afirmações forem verdadeiras: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:

  • Seu código de aplicativo depende do comportamento de ordenações anteriores do SQL ServerSQL Server.Your application code depends on the behavior of previous SQL ServerSQL Server collations.
  • Você deve armazenar dados de caractere que refletem vários idiomas.You must store character data that reflects multiple languages.

Há suporte para configurar ordenações nos seguintes níveis de uma instância do SQL ServerSQL Server:Setting collations are supported at the following levels of an instance of SQL ServerSQL Server:

Ordenações no nível do servidorServer-level collations

A ordenação do servidor padrão é definida durante a instalação do SQL ServerSQL Server e também se torna a ordenação padrão dos bancos de dados do sistema e de todos os bancos de dados de usuário.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 as ordenações somente Unicode não podem ser selecionadas durante a instalação do SQL ServerSQL Server, pois elas não são suportadas como ordenações no nível de servidor.Note that Unicode-only collations cannot be selected during SQL ServerSQL Server setup because they are not supported as server-level collations.

Depois que uma ordenação for atribuída ao servidor, você não poderá alterar a ordenação, exceto exportando todos os objetos de banco de dados e dados, recriando o banco de dados master e importando todos os objetos de banco de dados e dados.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. Em vez de alterar a ordenação padrão de uma instância do SQL ServerSQL Server, você pode especificar a ordenação desejada no momento da criação de um novo banco de dados ou coluna de banco de dados.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.

Ordenações do nível do banco de dadosDatabase-level collations

Quando um banco de dados é criado ou modificado, você pode usar a cláusula COLLATE da instrução CREATE DATABASE ou ALTER DATABASE para especificar a ordenação de banco de dados padrão.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. Se nenhuma ordenação for especificada, o banco de dados receberá a ordenação do servidor.If no collation is specified, the database is assigned the server collation.

Você não pode alterar a ordenação de bancos de dados do sistema, exceto alterando a ordenação para o servidor.You cannot change the collation of system databases except by changing the collation for the server.

A ordenação de banco de dados é usada para todos os metadados no banco de dados e é a padrão para todas as colunas de cadeia de caracteres, objetos temporários, nomes de variável e quaisquer outras cadeias de caracteres usadas no banco de dados.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. Quando você altera a ordenação de um banco de dados de usuário, pode haver conflitos de ordenação quando consultas no banco de dados acessam tabelas temporárias.When you change the collation of a user database, there can be collation conflicts when queries in the database access temporary tables. Sempre são armazenadas tabelas temporárias no banco de dados do sistema tempdb que usa a ordenação para a instância.Temporary tables are always stored in the tempdb system database, which uses the collation for the instance. Consultas que comparam dados de caractere entre o banco de dados de usuário e tempdb poderão falhar se as ordenações causarem um conflito ao avaliar os dados de caractere.Queries that compare character data between the user database and tempdb may fail if the collations cause a conflict in evaluating the character data. Você pode resolver isso especificando a cláusula COLLATE na consulta.You can resolve this by specifying the COLLATE clause in the query. Para obter mais informações, veja COLLATE (Transact-SQL).For more information, see COLLATE (Transact-SQL).

Ordenações em nível de colunaColumn-level collations

Quando você cria ou altera uma tabela, pode especificar ordenações para cada coluna de cadeia de caracteres usando a cláusula COLLATE.When you create or alter a table, you can specify collations for each character-string column by using the COLLATE clause. Se nenhuma ordenação for especificada, a ordenação padrão do banco de dados será atribuída à coluna.If no collation is specified, the column is assigned the default collation of the database.

Ordenações no nível da expressãoExpression-level collations

As ordenações no nível de expressão são definidas quando uma instrução é executada e afetam o modo como um conjunto de resultados é retornado.Expression-level collations are set when a statement is run, and they affect the way a result set is returned. Isso permite que os resultados da classificação ORDER BY sejam específicos de localidade.This enables ORDER BY sort results to be locale-specific. Use uma cláusula COLLATE como a seguinte para implementar ordenações no nível da expressão: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;    

LocalidadeLocale

Uma localidade é um conjunto de informações associadas a um local ou a uma cultura.A locale is a set of information that is associated with a location or a culture. Essas informações podem incluir o nome e o identificador do idioma falado, o script usado para escrever o idioma e as convenções culturais.This can include the name and identifier of the spoken language, the script that is used to write the language, and cultural conventions. As ordenações podem ser associadas a uma ou mais localidades.Collations can be associated with one or more locales. Para obter mais informações, consulte o artigo sobre IDs de localidade atribuídas pela Microsoft.For more information, see Locale IDs Assigned by Microsoft.

Code PageCode Page

Uma página de código é um conjunto de caracteres ordenado de um determinado script no qual um índice numérico ou valor de ponto de código é associado a cada caractere.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. Uma página de códigos do Windows geralmente é referenciada como um conjunto de caracteres ou um charset.A Windows code page is typically referred to as a character set or charset. As páginas de código são usadas para oferecer suporte aos conjuntos de caracteres e layouts de teclado usados por diferentes localidades de sistema do 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

A ordem de classificação especifica como os valores de dados são classificados.Sort order specifies how data values are sorted. Isso afeta os resultados da comparação de dados.This affects the results of data comparison. Os dados são classificados com o uso de ordenações e podem ser otimizados com o uso de índices.Data is sorted by using collations, and it can be optimized by using indexes.

Suporte de UnicodeUnicode Support

O Unicode é um padrão para mapear pontos de código para caracteres.Unicode is a standard for mapping code points to characters. Como é projetado para abranger todos os caracteres de todos os idiomas do mundo, não necessita de páginas de código diferentes para lidar com os diferentes conjuntos 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.

As páginas de código usadas por um cliente são determinadas pelas configurações do sistema operacional.The code pages that a client uses are determined by the operating system settings. Para definir páginas de código de cliente no sistema operacional Windows, use Configurações Regionais no Painel de Controle.To set client code pages on the Windows operating system, use Regional Settings in Control Panel.

Limitações consideráveis estão associadas a tipos de dados não Unicode.Significant limitations are associated with non-Unicode data types. Isso ocorre porque um computador não Unicode fica limitado a usar uma única página de código.This is because a non-Unicode computer is limited to use of a single code page. Você pode experimentar ganho de desempenho com o uso de Unicode, porque menos conversões de página de código são necessárias.You might experience performance gain by using Unicode because fewer code-page conversions are required. As ordenações Unicode devem ser selecionadas individualmente no nível de banco de dados, coluna ou expressão porque não têm suporte no nível de servidor.Unicode collations must be selected individually at the database, column, or expression level because they are not supported at the server level.

Quando você move dados de um servidor para um cliente, a ordenação do servidor pode não ser reconhecida por drivers de cliente mais antigos.When you move data from a server to a client, your server collation might not be recognized by older client drivers. Isso pode ocorrer quando você move dados de um servidor Unicode para um cliente não Unicode.This can occur when you move data from a Unicode server to a non-Unicode client. A melhor opção pode ser atualizar o sistema operacional do cliente para que as ordenações de sistema subjacentes sejam atualizadas.Your best option might be to upgrade the client operating system so that the underlying system collations are updated. Se houver um software de cliente de banco de dados instalado no cliente, você deverá considerar a possibilidade de aplicar uma atualização de serviço a esse software.If the client has database client software installed, you might consider applying a service update to the database client software.

Dica

Você também pode tentar usar uma ordenação diferente para os dados no servidor.You can also try to use a different collation for the data on the server. Escolha uma ordenação que mapeia para uma página de código no cliente.Choose a collation that maps to a code page on the client.

Se você armazenar dados de caracteres que refletem vários idiomas no SQL ServerSQL Server (SQL Server 2005 (9.x)SQL Server 2005 (9.x) ao SQL Server 2017SQL Server 2017), use tipos de dados Unicode (nchar, nvarchar e ntext) em vez de tipos de dados não Unicode (char, varchar e 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).

Observação

No caso dos tipos de dados Unicode, o Mecanismo de Banco de DadosDatabase Engine poderá representar até 65.535 caracteres usando o UCS-2 ou o intervalo completo de Unicode (1.114.111 caracteres) se caracteres suplementares forem usados.For Unicode data types, the Mecanismo de Banco de DadosDatabase 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 saber mais sobre como habilitar caracteres suplementares, confira o tópico Caracteres Suplementares.For more information on enabling supplementary characters, see Supplementary Characters.

Como alternativa, começando com o SQL Server 2019SQL Server 2019, se uma ordenação habilitada para UTF-8 (_UTF8) for usada, tipos de dados que eram não Unicode (char e varchar) se tornarão tipos de dados 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. O SQL Server 2019SQL Server 2019 não altera o comportamento de tipos de dados Unicode existentes anteriormente (UTF-16) (nchar, nvarchar e ntext).SQL Server 2019SQL Server 2019 does not change the behavior of previously existing Unicode (UTF-16) data types (nchar, nvarchar, and ntext). Para ver mais detalhes, confira Diferenças de armazenamento entre UTF-8 e UTF-16.See Storage differences between UTF-8 and UTF-16 for further details.

Para usar as ordenações UTF-16 disponíveis no SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) ao SQL Server 2017SQL Server 2017) para melhorar a pesquisa e classificação de alguns caracteres Unicode (somente ordenações do Windows), selecione uma das ordenações dos caracteres suplementares (_SC) ou uma das ordenações da versão 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 os agrupamentos UTF-8 disponíveis no SQL Server 2019SQL Server 2019 para aprimorar a pesquisa e a classificação de alguns caracteres Unicode (somente agrupamentos do Windows), você precisa selecionar agrupamentos habilitados para codificação 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).

  • O sinalizador de UTF8 pode ser aplicado a:The UTF8 flag can be applied to:

    • Ordenações da versão 90Version 90 collations

      Observação

      Somente quando caracteres suplementares (_SC) ou agrupamentos com diferenciação de seletor de variação (_VSS) já existem nesta versão.Only when supplementary characters (_SC) or variation-selector-sensitive (_VSS) aware collations already exist in this version.

    • Ordenações da versão 100Version 100 collations
    • Agrupamentos da versão 140Version 140 collations
    • Ordenação binária BIN21BIN21 binary collation
  • O sinalizador de UTF8 não pode ser aplicado a:The UTF8 flag cannot be applied to:

    • Agrupamentos da versão 90 sem suporte a caracteres suplementares (_SC) ou a diferenciação de seletor de variação (_VSS)Version 90 collations that don't support supplementary characters (_SC) or variation-selector-sensitive (_VSS)
    • As ordenações primárias BIN ou BIN22The BIN or BIN22 binary collations
    • As ordenações do SQL*The SQL* collations

1 No SQL Server 2019SQL Server 2019 CTP 2.3 em diante.1 Starting with SQL Server 2019SQL Server 2019 CTP 2.3. O SQL Server 2019SQL Server 2019 CTP 3.0 substituiu a ordenação UTF8_BIN2 pela Latin1_General_100_BIN2_UTF8.SQL Server 2019SQL Server 2019 CTP 3.0 replaced collation UTF8_BIN2 with Latin1_General_100_BIN2_UTF8.
2 Até com o SQL Server 2019SQL Server 2019 CTP 2.3.2 Up to with SQL Server 2019SQL Server 2019 CTP 2.3.

Para avaliar os problemas relacionados ao uso de tipos de dados Unicode ou não Unicode, teste seu cenário para medir as diferenças de desempenho em seu ambiente.To evaluate issues that are related to using Unicode or non-Unicode data types, test your scenario to measure performance differences in your environment. Uma boa prática é padronizar a ordenação usada nos sistemas de sua organização e implantar servidores e clientes Unicode sempre que possível.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.

Na maioria das situações, o SQL ServerSQL Server interage com outros servidores ou clientes, e sua organização poderá usar vários padrões de acesso a dados entre aplicativos e instâncias 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. ClientesSQL ServerSQL Server são de um destes dois tipos principais:SQL ServerSQL Server clients are one of two main types:

  • Clientes Unicode que usam OLE DB e ODBC (Open Database Connectivity) versão 3.7 ou uma versão posterior.Unicode clients that use OLE DB and Open Database Connectivity (ODBC) version 3.7 or a later version.
  • Clientes não Unicode que usam DB-Library e ODBC versão 3.6 ou uma versão anterior.Non-Unicode clients that use DB-Library and ODBC version 3.6 or an earlier version.

A tabela a seguir fornece informações sobre como usar dados multilíngues com várias combinações de servidores Unicode e não Unicode.The following table provides information about using multilingual data with various combinations of Unicode and non-Unicode servers.

ServidorServer ClienteClient Benefícios ou limitaçõesBenefits or Limitations
UnicodeUnicode UnicodeUnicode Como os dados Unicode são usados em todo o sistema, este cenário fornece o melhor desempenho e proteção contra danos de dados recuperados.Because Unicode data is used throughout the system, this scenario provides the best performance and protection from corruption of retrieved data. É isso o que acontece com ADO (ActiveX Data Objects), OLE DB e ODBC versão 3.7 ou uma versão posterior.This is the situation with ActiveX Data Objects (ADO), OLE DB, and ODBC version 3.7 or a later version.
UnicodeUnicode Não UnicodeNon-Unicode Neste cenário, principalmente em conexões entre um servidor que executa um sistema operacional mais recente e um cliente com uma versão mais antiga do SQL ServerSQL Serverou em um sistema operacional mais antigo, pode haver limitações ou erros quando você move os dados para um computador 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. Os dados Unicode no servidor tentam mapear para uma página de código correspondente no cliente não Unicode para converter os dados.Unicode data on the server tries to map to a corresponding code page on the non-Unicode client to convert the data.
Não UnicodeNon-Unicode UnicodeUnicode Esta não é uma configuração ideal para usar dados multilíngues.This is not an ideal configuration for using multilingual data. Não é possível gravar dados Unicode no servidor não Unicode.You cannot write Unicode data to the non-Unicode server. É provável que ocorram problemas quando os dados forem enviados para servidores que estejam fora da página de código do servidor.Problems are likely to occur when data is sent to servers that are outside the server's code page.
Não UnicodeNon-Unicode Não UnicodeNon-Unicode Este é um cenário muito limitado para dados multilíngues.This is a very limiting scenario for multilingual data. Você pode usar uma única página de código.You can use only a single code page.

Caracteres complementaresSupplementary Characters

O Unicode Consortium aloca um ponto de código exclusivo para cada caractere, que é um valor no intervalo de 000000 a 10FFFF.The Unicode Consortium allocates each character a unique code point, which is a value in the range 000000 to 10FFFF. Os caracteres usados com mais frequência têm valores de ponto de código no intervalo de 000000 a 00FFFF (65.535 caracteres) que se encaixam em uma palavra de 8 ou 16 bits na memória e no 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. Geralmente, esse intervalo é designado como BMP (Plano Multilíngue Básico).This range is usually designated as the Basic Multilingual Plane (BMP).

No entanto, o Consortium Unicode estabeleceu 16 "planos" adicionais de caracteres, cada um com o mesmo tamanho do BMP.But the Unicode Consortium has established 16 additional "planes" of characters, each the same size as the BMP. Com essa definição, o Unicode tem potencial para representar 1.114.112 caracteres (ou seja, 216 * 17 caracteres), dentro do intervalo de pontos de código de 000000 a 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. Os caracteres com valores de ponto de código superiores a 00FFFF exigem duas a quatro palavras consecutivas de 8 bits (UTF-8) ou duas palavras 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). Esses caracteres localizados além do BMP são chamados de caracteres suplementares, e as palavras adicionais consecutivas de 8 ou 16 bits são chamadas de pares alternativos.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 ver mais detalhes sobre caracteres suplementares, substitutos e pares alternativos, confira o Padrão Unicode.For more details about supplementary characters, surrogates, and surrogate pairs, refer to the Unicode Standard.

O SQL ServerSQL Server fornece tipos de dados, como nchar e nvarchar, para armazenar dados Unicode no intervalo do BMP (000000 a 00FFFF), que o Mecanismo de Banco de DadosDatabase Engine codifica com UCS-2.SQL ServerSQL Server provides data types such as nchar and nvarchar to store Unicode data in the BMP range (000000 to 00FFFF), which the Mecanismo de Banco de DadosDatabase Engine encodes using UCS-2.

O SQL Server 2012 (11.x)SQL Server 2012 (11.x) adicionou uma nova família de ordenações de caracteres suplementares (_SC) que podem ser usados com os tipos de dados nchar, nvarchar e sql_variant para representar o intervalo completo de caracteres Unicode (000000 a 10FFFF).SQL Server 2012 (11.x)SQL Server 2012 (11.x) 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 exemplo: Latin1_General_100_CI_AS_SC ou, ao usar uma ordenação de japonês, Japanese_Bushu_Kakusu_100_CI_AS_SC.For example: Latin1_General_100_CI_AS_SC, or if using a Japanese collation, Japanese_Bushu_Kakusu_100_CI_AS_SC.

O SQL Server 2019SQL Server 2019 estende o suporte a caracteres suplementares para os tipos de dados char e varchar com as novas ordenações habilitadas para UTF-8 (_UTF8).SQL Server 2019SQL Server 2019 extends supplementary character support to the data types char and varchar with the new UTF-8 enabled collations (_UTF8). Elas também podem representar o intervalo completo de caracteres Unicode.These are also capable of representing the full Unicode character range.

Observação

A partir do SQL Server 2014 (12.x)SQL Server 2014 (12.x), todas as novas ordenações da versão _140 são automaticamente compatíveis com caracteres suplementares.Starting in SQL Server 2014 (12.x)SQL Server 2014 (12.x), all new _140 collations automatically support supplementary characters.

Se você usar caracteres suplementares:If you use supplementary characters:

  • Caracteres suplementares podem ser usados apenas em operações de comparação e ordenação em versões de ordenação 90 ou superior.Supplementary characters can be used in ordering and comparison operations in collation versions 90 or greater.

  • Todas as ordenações de versão 100 dão suporte à classificação linguística com caracteres suplementares.All version 100 collations support linguistic sorting with supplementary characters.

  • Os caracteres suplementares não têm suporte para uso em metadados, como em nomes de objetos de banco de dados.Supplementary characters are not supported for use in metadata, such as in names of database objects.

  • Bancos de dados que usam ordenações com caracteres suplementares (_SC), não podem ser habilitados para replicação de SQL ServerSQL Server.Databases that use collations with supplementary characters (_SC), cannot be enabled for SQL ServerSQL Server Replication. Isso ocorre porque alguns dos procedimentos armazenados e tabelas do sistema criados para replicação usam o tipo de dados ntext herdado que não é compatível com caracteres suplementares.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.

  • O sinalizador de SC pode ser aplicado a:The SC flag can be applied to:

    • Ordenações da versão 90Version 90 collations
    • Ordenações da versão 100Version 100 collations
  • O sinalizador de SC não pode ser aplicado a:The SC flag cannot be applied to:

    • Ordenações do Windows sem versão na versão 80Version 80 non-versioned Windows collations
    • As ordenações primárias BIN ou BIN2The BIN or BIN2 binary collations
    • As ordenações do SQL*The SQL* collations
    • Ordenações da versão 140 (eles não precisam do sinalizador de SC pois já dão suporte a caracteres suplementares)Version 140 collations (these don't need the SC flag as they already support supplementary characters)

A seguinte tabela compara o comportamento de alguns operadores e funções de cadeia de caracteres quando eles usam caracteres suplementares com e sem uma ordenação SCA (reconhecimento de caracteres suplementares):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:

Função ou operador de cadeia de caracteresString Function or Operator Com uma ordenação SCA (Reconhecimento de Caracteres Suplementares)With a Supplementary Character-Aware (SCA) Collation Sem uma ordenação de SCAWithout an SCA Collation
CHARINDEXCHARINDEX

LENLEN

PATINDEXPATINDEX
O par substituto UTF-16 é contado como um único ponto de código.The UTF-16 surrogate pair is counted as a single codepoint. O par substituto UTF-16 é contado como dois pontos de código.The UTF-16 surrogate pair is counted as two codepoints.
LEFTLEFT

REPLACEREPLACE

REVERSEREVERSE

RIGHTRIGHT

SUBSTRINGSUBSTRING

STUFFSTUFF
Essas funções tratam cada par substituto como um único ponto de código e funcionam conforme o esperado.These functions treat each surrogate pair as a single codepoint and work as expected. Essas funções podem dividir qualquer par substituto e levar a resultados inesperados.These functions may split any surrogate pairs and lead to unexpected results.
NCHARNCHAR Retorna o caractere que corresponde ao valor de ponto de código Unicode especificado no intervalo de 0 a 0x10FFFF.Returns the character corresponding to the specified Unicode codepoint value in the range 0 to 0x10FFFF. Se o valor especificado estiver no intervalo de 0 a 0xFFFF, será retornado um caractere.If the value specified lies in the range 0 through 0xFFFF, one character is returned. Para valores mais altos, é retornado o substituto correspondente.For higher values, the corresponding surrogate is returned. Um valor mais alto que 0xFFFF retorna NULL, em vez do substituto correspondente.A value higher than 0xFFFF returns NULL instead of the corresponding surrogate.
UNICODEUNICODE Retorna um ponto de código UTF-16 no intervalo de 0 a 0x10FFFF.Returns a UTF-16 codepoint in the range 0 through 0x10FFFF. Retorna um ponto de código UCS-2 no intervalo de 0 a 0xFFFF.Returns a UCS-2 codepoint in the range 0 through 0xFFFF.
Corresponder a um caractere curingaMatch One Character Wildcard

Curinga – caracter(es) para não corresponderWildcard - Character(s) Not to Match
Há suporte para caracteres suplementares para todas as operações de curingas.Supplementary characters are supported for all wildcard operations. Não há suporte para caracteres suplementares para estas operações de curingas.Supplementary characters are not supported for these wildcard operations. Há suporte para outros operadores curinga.Other wildcard operators are supported.

Suporte a GB18030GB18030 Support

GB18030 é um padrão separado usado na República Popular da China para codificar caracteres chineses.GB18030 is a separate standard used in the People's Republic of China for encoding Chinese characters. Em GB18030, caracteres podem ter 1, 2 ou 4 bytes em comprimento.In GB18030, characters can be 1, 2, or 4 bytes in length. OSQL ServerSQL Server oferece suporte a caracteres GB18030 codificados, reconhecendo-os quando eles entram no servidor, provenientes de um aplicativo cliente, convertendo-os e armazenando-os nativamente como caracteres Unicode.SQL ServerSQL Server 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. Após serem armazenados no servidor, são tratados como caracteres Unicode em todas as operações subsequentes.After they are stored in the server, they are treated as Unicode characters in any subsequent operations. Você pode usar qualquer ordenação em chinês, preferivelmente a mais recente versão 100.You can use any Chinese collation, preferably the latest 100 version. Todas as ordenações de nível _100 dão suporte à classificação linguística com caracteres GB18030.All _100 level collations support linguistic sorting with GB18030 characters. Se os dados incluírem caracteres suplementares (pares alternativos), você poderá usar as ordenações de SC disponíveis no SQL Server 2017SQL Server 2017 para aprimorar a pesquisa e a classificação.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.

Suporte a script complexoComplex Script Support

OSQL ServerSQL Server oferece suporte à inserção, armazenamento, alteração e exibição de scripts complexos.SQL ServerSQL Server can support inputting, storing, changing, and displaying complex scripts. Scripts complexos incluem os seguintes tipos:Complex scripts include the following types:

  • Scripts que incluem uma combinação de texto da direita para a esquerda e da esquerda para a direita, como uma combinação de texto em á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.
  • Scripts cujos caracteres alteram de forma de acordo com sua posição ou quando combinados com outros caracteres, como caracteres árabes, índicos e tailandeses.Scripts whose characters change shape depending on their position, or when combined with other characters, such as Arabic, Indic, and Thai characters.
  • Idiomas como tailandês que exigem dicionários internos reconhecer palavras porque não há nenhuma quebra entre eles.Languages such as Thai that require internal dictionaries to recognize words because there are no breaks between them.

Aplicativos de banco de dados que interagem com o SQL ServerSQL Server devem usar controles que oferecem suporte a scripts complexos.Database applications that interact with SQL ServerSQL Server must use controls that support complex scripts. Controles de formulário padrão do Windows que são criados em código gerenciado são habilitados para script complexo.Standard Windows form controls that are created in managed code are complex script-enabled.

Ordenações em japonês adicionados no 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 do SQL Server 2017 (14.x)SQL Server 2017 (14.x), há suporte para novas famílias de ordenação em japonês, com as permutações de várias opções (_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 listar esses agrupamentos, você pode consultar o Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine:To list these collations, you can query the Mecanismo de Banco de Dados do 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 as novas ordenações têm suporte interno para caracteres suplementares, de modo que nenhuma das novas ordenações da versão _140 têm (ou precisa de) sinalizador de 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.

Essas ordenações são compatíveis com índices, tabelas com otimização de memória, índices columnstore e módulos compilados nativamente no Mecanismo de Banco de DadosDatabase Engine.These collations are supported in Mecanismo de Banco de DadosDatabase Engine indexes, memory-optimized tables, columnstore indexes, and natively compiled modules.

Suporte para UTF-8UTF-8 support

O SQL Server 2019SQL Server 2019 apresenta suporte completo para a codificação de caracteres UTF-8 amplamente utilizada como codificação de importação ou exportação e como ordenação em nível de coluna ou de banco de dados para dados de cadeia de caracteres.SQL Server 2019SQL Server 2019 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. A UTF-8 é permitida nos tipos de dados char e varchar e é habilitada quando você cria ou altera a ordenação de um objeto para uma ordenação com o sufixo 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 exemplo, LATIN1_GENERAL_100_CI_AS_SC para LATIN1_GENERAL_100_CI_AS_SC_UTF8.For example,LATIN1_GENERAL_100_CI_AS_SC to LATIN1_GENERAL_100_CI_AS_SC_UTF8.

A UTF-8 só está disponível para agrupamentos do Windows com suporte para caracteres suplementares, conforme introduzido no 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). Os tipos de dados nchar e nvarchar permitem apenas codificação UCS-2 e UTF-16 e permanecem inalterados.nchar and nvarchar allow UCS-2 or UTF-16 encoding only, and remain unchanged.

Diferenças de armazenamento entre UTF-8 e UTF-16Storage differences between UTF-8 and UTF-16

O Unicode Consortium aloca um ponto de código exclusivo para cada caractere, que é um valor no intervalo de 000000 a 10FFFF.The Unicode Consortium allocates each character a unique codepoint, which is a value in the range 000000 to 10FFFF. Com o SQL Server 2019SQL Server 2019, as codificações em UTF-8 e UTF-16 estão disponíveis para representar o intervalo completo:With SQL Server 2019SQL Server 2019, both UTF-8 and UTF-16 encodings are available to represent the full range:

  • Com a codificação UTF-8, os caracteres no intervalo de ASCII (000000 – 00007F) exigem 1 byte, os pontos de código de 000080 a 0007FF exigem 2 bytes, os pontos de código de 000800 a 00FFFF exigem 3 bytes e os pontos de código de 0010000 a 0010FFFF exigem 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.
  • Com a codificação UTF-16, os pontos de código de 000000 a 00FFFF exigem 2 bytes e os pontos de código de 0010000 a 0010FFFF exigem 4 bytes.With UTF-16 encoding, code points 000000 to 00FFFF require 2 bytes, and code points 0010000 to 0010FFFF require 4 bytes.

A tabela a seguir descreve os bytes de armazenamento de codificação para cada intervalo de caracteres e tipo de codificação: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 armazenamento 1 com UTF-8Storage bytes 1 with UTF-8 Bytes de armazenamento 1 com 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 – 1.023160 – 1,023
1.024 – 2.0471,024 – 2,047
22 22
000800 – 003FFF000800 – 003FFF
004000 – 00FFFF004000 – 00FFFF
2.048 – 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 Os bytes de armazenamento se referem ao comprimento do byte codificado, e não ao tamanho de armazenamento em disco do respectivo tipo de dados.1 The storage bytes refer to the encoded byte length, not the respective data type on-disk storage size. Para saber mais sobre tamanhos de armazenamento em disco, confira os tipos de dados nchar e nvarchar e char e varchar.For more information about on-disk storage sizes, see nchar and nvarchar and char and varchar.

2 Intervalo de pontos de código para caracteres suplementares.2 Code point range for supplementary characters.

Dica

É comum pensar em CHAR(n) e em VARCHAR(n) ou em NCHAR(n) e em NVARCHAR(n), o n define o 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. Isso ocorre porque, no exemplo de uma coluna CHAR(10), 10 caracteres ASCII no intervalo 0-127 podem ser armazenados usando uma ordenação como Latin1_General_100_CI_AI, porque cada caractere nesse intervalo usa apenas 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.
No entanto, em CHAR(n) e em VARCHAR(n), o n define o tamanho da cadeia de caracteres em bytes (0-8.000), enquanto em NCHAR(n) e em NVARCHAR(n) o n define o tamanho da cadeia de caracteres em pares de bytes (0-4.000).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 podem ser armazenados.n never defines numbers of characters that can be stored.

Como descrito acima, a escolha da codificação e do tipo de dados Unicode apropriados pode proporcionar economias significativas de armazenamento ou aumentar o volume de armazenamento atual, dependendo do conjunto de caracteres em 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 exemplo, ao usar uma ordenação Latin que é habilitada para UTF-8, como Latin1_General_100_CI_AI_SC_UTF8, uma coluna CHAR(10) armazena 10 bytes e pode conter 10 caracteres ASCII no intervalo 0-127, mas apenas cinco caracteres no intervalo 128-2047 e apenas três caracteres no 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 comparação, como uma coluna NCHAR(10) armazena 10 pares de bytes (20 bytes), ela pode conter 10 caracteres no intervalo de 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 usar a codificação UTF-8 ou UTF-16 para um banco de dados ou uma coluna, considere a distribuição dos dados de cadeia de caracteres que serão armazenados: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:

  • Se a maioria estiver no intervalo 0-127 de ASCII (como o idioma inglês), cada caractere exigirá 1 byte com UTF-8 e 2 bytes com 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. O uso de UTF-8 proporciona vantagens de armazenamento.Using UTF-8 provides storage benefits. A alteração de um tipo de dados de coluna existente com caracteres ASCII no intervalo 0-127 de NCHAR(10) a CHAR(10) usando uma ordenação habilitada para UTF-8 converte 50 por cento de redução em requisitos de armazenamento.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. Essa redução ocorre porque NCHAR(10) exige 20 bytes para armazenamento, enquanto CHAR(10) exige 10 bytes para a mesma representação de cadeia de caracteres Unicode.This reduction is because NCHAR(10) requires 20 bytes for storage, whereas CHAR(10) requires 10 bytes for the same Unicode string representation.
  • Acima do intervalo de ASCII, quase todos os scripts latinos, além de árabe, armênio, cirílico, copta, grego, hebraico, n’ko, siríaco e tāna exigirão 2 bytes por caractere em UTF-8 e 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. Nesses casos, não há diferenças significativas de armazenamento para tipos de dados comparáveis (por exemplo, entre o uso dos tipos de dados char ou nchar).In these cases there aren't significant storage differences for comparable data types (for example between using char or nchar).
  • Se a maioria for de scripts do Leste Asiático (como chinês, coreano e japonês), cada caractere exigirá 3 bytes com UTF-8 e 2 bytes com 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. O uso de UTF-16 proporciona vantagens de armazenamento.Using UTF-16 provides storage benefits.
  • Os caracteres no intervalo de 010000 a 10FFFF exigem 4 bytes tanto em UTF-8 como em UTF-16.Characters in the 010000 to 10FFFF range require 4-bytes in both UTF-8 and UTF-16. Nesses casos, não há diferenças de armazenamento para tipos de dados comparáveis (por exemplo, entre o uso dos tipos de dados char ou nchar).In these cases there aren't storage differences for comparable data types (for example between using char or nchar).

Para ver outras considerações, confira o artigo Gravar instruções Transact-SQL internacionais.For other considerations, see Write International Transact-SQL Statements.

TarefaTask TópicoTopic
Descreve como definir ou alterar a ordenação da instância de SQL Server.Describes how to set or change the collation of the instance of SQL Server. Definir ou alterar a ordenação do servidorSet or Change the Server Collation
Descreve como definir ou alterar a ordenação de um banco de dados de usuário.Describes how to set or change the collation of a user database. Definir ou alterar a ordenação de banco de dadosSet or Change the Database Collation
Descreve como definir ou alterar a ordenação de uma coluna no banco de dados.Describes how to set or change the collation of a column in the database. Definir ou alterar a ordenação de colunaSet or Change the Column Collation
Descreve como retornar informações de ordenação ao servidor, banco de dados ou nível de coluna.Describes how to return collation information at the server, database, or column level. Exibir informações de ordenaçãoView Collation Information
Descreve como escrever instruções Transact-SQL que tenham mais portabilidade de um idioma para outro ou que ofereçam suporte a vários idiomas mais facilmente.Describes how to write Transact-SQL statements that are more portable from one language to another, or support multiple languages more easily. Gravar instruções Transact-SQL internacionaisWrite International Transact-SQL Statements
Descreve como alterar o idioma de mensagens de erro e preferências de como data, hora e dados de moeda são usados e exibidos.Describes how to change the language of error messages and preferences for how date, time, and currency data are used and displayed. Definir um idioma de sessãoSet a Session Language

Práticas recomendadas para alteração em ordenações do SQL Server SQL Server Best Practices Collation Change
Usar o formato de caractere Unicode para importar ou exportar dados (SQL Server) Use Unicode Character Format to Import or Export Data (SQL Server)
Gravar instruções Transact-SQL internacionais Write International Transact-SQL Statements
"Práticas recomendadas para migração para Unicode no SQL Server" – deixou de receber manutenção"SQL Server Best Practices Migration to Unicode" - No longer maintained
Site do Unicode Consortium Unicode Consortium Web site
Padrão Unicode Unicode Standard
Suporte ao UTF-8 no OLE DB Driver for SQL ServerUTF-8 Support in OLE DB Driver for SQL Server
Blog Apresentação do suporte a UTF-8 para SQL ServerBlog Introducing UTF-8 support for SQL Server

Consulte TambémSee Also

Ordenações de banco de dados independentes Contained Database Collations
Escolher um idioma ao criar um índice de texto completo Choose a Language When Creating a Full-Text Index
sys.fn_helpcollations (Transact-SQL)sys.fn_helpcollations (Transact-SQL)