Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As ordenações em SQL 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. Colações que são usadas com tipos de dados de caractere, como char e varchar, ditam a página de código e os caracteres correspondentes que podem ser representados para esse tipo de dados. Se você estiver instalando uma nova instância do SQL Server, restaurando um backup de banco de dados ou conectando o servidor a bancos de dados cliente, é importante que você entenda os requisitos de localidade, ordem de classificação e diferenciação de maiúsculas e minúsculas dos dados com os quais você trabalhará. Para listar as ordenações disponíveis em sua instância do SQL Server, consulte sys.fn_helpcollations (Transact-SQL).
Ao selecionar uma ordenação para seu servidor, banco de dados, coluna ou expressão, você está atribuindo determinadas características aos seus dados que afetarão os resultados de muitas operações no banco de dados. Por exemplo, quando você constrói uma consulta usando ORDER BY, a ordem de classificação do 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.
Para usar melhor o suporte à ordenação no SQL Server, você deve entender os termos definidos neste tópico e como eles se relacionam com as características de seus dados.
Ordenação
Uma ordenação especifica os padrões de bit que representam cada caractere em um conjunto de dados. As ordenações também determinam as regras que classificam e comparam dados. SQL Server dá suporte ao armazenamento de objetos com ordenações diferentes em um banco de dados individual. 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. Os dados movidos entre colunas não Unicode devem ser convertidos da página de código-fonte para a página de código de destino.
Os resultados da instrução Transact-SQL podem variar quando a instrução for executada no contexto de diferentes bancos de dados que tenham configurações de ordenação diferentes. Se for possível, use uma ordenação padronizada para sua organização. Dessa forma, você não precisa especificar explicitamente a ordenação em cada caractere ou expressão Unicode. 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. Para obter mais informações, consulte Precedência de Ordenação (Transact-SQL).
As opções associadas a uma ordenação são sensibilidade de maiúsculas e minúsculas, sensibilidade de ênfase, sensibilidade a Kana, sensibilidade de largura. Essas opções são especificadas ao serem adicionadas ao nome da colação. Por exemplo, essa ordenação Japanese_Bushu_Kakusu_100_CS_AS_KS_WS é sensível a maiúsculas e minúsculas, a acentos, a Kana e à largura. A tabela a seguir descreve o comportamento associado a essas opções.
| Opção | Descrição |
|---|---|
| Sensível a maiúsculas e minúsculas (_CS) | Faz distinção entre letras maiúscula e minúsculas. Se selecionado, as letras minúsculas são ordenadas antes de suas versões maiúsculas. Se essa opção não estiver selecionada, a ordenação não diferenciará maiúsculas de minúsculas. Ou seja, o SQL Server considera as versões de letras maiúsculas e minúsculas como idênticas para fins de classificação. Você pode selecionar caso explicitamente a não diferenciação de maiúsculas e minúsculas especificando _CI. |
| Sensível a acentos (_AS) | Faz distinção entre caracteres acentuados e não acentuados. Por exemplo, 'a' não é igual a 'ấ'. Se essa opção não estiver selecionada, a ordenação não diferenciará ênfase. Ou seja, o SQL Server considera as versões com e sem acentos como idênticas para fins de classificação. Você pode selecionar a não diferenciação de acentos especificando _AI. |
| Sensibilidade ao kana (_KS) | Distingue entre os dois tipos de caracteres kana japoneses: hiragana e katakana. Se essa opção não estiver selecionada, a ordenação é insensível a Kana. Ou seja, o SQL Server considera que caracteres hiragana e katakana são iguais para fins de classificação. Omitir essa opção é o único método para especificar a insensibilidade a Kana. |
| Sensível à largura (_WS) | Faz distinção entre caracteres de largura inteira e de meia largura. Se essa opção não estiver selecionada, o SQL Server considerará que a representação de largura total e meia largura do mesmo caractere será idêntica para fins de classificação. A omissão desta opção é o único método de especificar a não diferenciação de largura. |
O SQL Server oferece suporte aos seguintes conjuntos de ordenação:
ordenações do Windows
As ordenações do Windows definem regras para o armazenamento de dados de caractere baseadas em uma localidade de sistema do Windows associada. Para uma ordenação do Windows, a comparação de dados não Unicode é implementada usando o mesmo algoritmo que os dados Unicode. As regras de ordenação base do Windows especificam qual alfabeto ou idioma é usado quando a classificação de dicionário é aplicada e a página de código usada para armazenar dados de caracteres não Unicode. 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. Isso fornece consistência entre tipos de dados no SQL Server e também permite que os desenvolvedores classifiquem cadeias de caracteres em seus aplicativos usando as mesmas regras usadas pelo SQL Server. Para obter mais informações, consulte o Nome da Ordenação do Windows (Transact-SQL).
Ordenações primárias
Os dados classificados de ordenações primárias na sequência de valores codificados definidos pelo tipo de localidade e dados. Eles fazem diferenciação de maiúsculas e minúsculas. Uma ordenação binária no SQL Server define a localidade e a página de código ANSI que serão usadas. Isso impõe uma ordem de classificação binária. Como são relativamente simples, ordenações binárias ajudam a melhorar o desempenho do aplicativo. Para tipos de dados não Unicode, as comparações de dados são baseadas nos pontos de código definidos na página de código ANSI. Para tipos de dados Unicode, as comparações de dados têm como base os pontos de código Unicode. Para ordenações binárias em tipos de dados Unicode, a localidade não é considerada em classificações de dados. Por exemplo, Latin_1_General_BIN e Japanese_BIN produzem resultados de classificação idênticos quando são usados em dados Unicode.
Há dois tipos de ordenações binárias no SQL Server; as ordenações mais antigas BIN e as ordenações mais BIN2 recentes. Em uma BIN2 ordenação, todos os caracteres são classificados de acordo com seus pontos de código. Em uma BIN ordenação, somente 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 bytes. (Como a plataforma Intel é uma arquitetura pouco endiana, os caracteres de código Unicode são sempre armazenados com troca de bytes.)
ordenações do SQL Server
As ordenações (SQL_*) do SQL Server oferecem compatibilidade de ordem de classificação com versões anteriores do SQL Server. As regras de classificação de dicionário para dados não Unicode são incompatíveis com qualquer rotina de classificação fornecida pelos sistemas operacionais Windows. No entanto, a classificação de dados Unicode é compatível com uma versão específica das regras de classificação do Windows. Como as ordenações do SQL Server usam regras de comparação diferentes para dados não Unicode e Unicode, você verá resultados diferentes para comparações dos mesmos dados, dependendo do tipo de dados subjacente. Para obter mais informações, consulte o Nome da Ordenação do SQL Server (Transact-SQL).
Observação
Quando você atualiza uma instância em idioma inglês do SQL Server, as ordenações do SQL Server (SQL_*) podem ser especificadas para compatibilidade com instâncias existentes do SQL Server. Como a ordenação padrão de uma instância do SQL Server é definida durante a instalação, especifique as configurações de ordenação cuidadosamente quando as seguintes forem verdadeiras:
- Seu código de aplicativo depende do comportamento de ordenações anteriores do SQL Server.
- Você deve armazenar dados de caractere que refletem vários idiomas.
Há suporte para configurar ordenações nos seguintes níveis de uma instância do SQL Server:
Ordenações no nível do servidor
A ordenação de servidor padrão é definida durante a instalação do SQL 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. Observe que as ordenações somente Unicode não podem ser selecionadas durante a instalação do SQL Server porque não têm suporte como ordenações no nível do servidor.
Depois que uma ordenação tiver sido atribuída ao servidor, você não poderá alterar a ordenação, exceto exportando todos os objetos e dados do banco de dados, recriando o master banco de dados e importando todos os objetos e dados do banco de dados. Em vez de alterar a ordenação padrão de uma instância do SQL Server, você pode especificar a ordenação desejada no momento em que criar um novo banco de dados ou coluna de banco de dados.
Ordenações do nível do banco de dados
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. Se nenhuma ordenação for especificada, o banco de dados receberá a ordenação do servidor.
Você não pode alterar a ordenação de bancos de dados do sistema, exceto alterando a ordenação do servidor.
A ordenação de banco de dados é usada para todos os metadados no banco de dados e é o padrão para todas as colunas de cadeia de caracteres, objetos temporários, nomes de variáveis e quaisquer outras cadeias de caracteres usadas no banco de dados. 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. Tabelas temporárias são sempre armazenadas no banco de dados do tempdb sistema, que usará a ordenação para a instância. Consultas que comparam dados de caracteres entre o banco de dados do usuário e tempdb podem falhar se as ordenações causarem um conflito na avaliação dos dados de caractere. Você pode resolver isso especificando a cláusula COLLATE na consulta. Para obter mais informações, consulte COLLATE (Transact-SQL).
Ordenações em nível de coluna
Ao criar ou alterar uma tabela, você pode especificar ordenações para cada coluna de cadeia de caracteres usando a cláusula COLLATE. Se nenhuma ordenação for especificada, a coluna recebe a ordenação padrão do banco de dados.
Ordenações no nível da expressão
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. Isso permite que os resultados da classificação ORDER BY sejam específicos da localidade. Use uma cláusula COLLATE como a seguinte para implementar ordenações no nível da expressão:
SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI;
Localidade
Uma localidade é um conjunto de informações que está associado a um local ou uma cultura. Isso pode incluir o nome e o identificador da linguagem falada, o script usado para escrever o idioma e as convenções culturais. As ordenações podem ser associadas a uma ou mais localidades. Para obter mais informações, consulte o artigo sobre IDs de localidade atribuídas pela Microsoft.
Página de código
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. Uma página de código do Windows normalmente é conhecida como um conjunto de caracteres ou um conjunto de caracteres. 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.
Ordem de Classificação
A ordem de classificação especifica como os valores de dados são classificados. Isso afeta os resultados da comparação de dados. Os dados são classificados com o uso de ordenações e podem ser otimizados com o uso de índices.
Suporte Unicode
O Unicode é um padrão para mapear pontos de código para caracteres. Como ele foi projetado para abranger todos os caracteres de todas as linguagens do mundo, não há necessidade de páginas de código diferentes lidarem com diferentes conjuntos de caracteres. Se você armazenar dados de caractere que refletem vários idiomas, sempre use tipos de dados Unicode (nchare nvarcharntext) em vez dos tipos de dados não Unicode (chare varchartext).
Limitações consideráveis estão associadas a tipos de dados não Unicode. Isso ocorre porque um computador não Unicode será limitado ao uso de uma única página de código. Você pode experimentar o ganho de desempenho usando o Unicode porque menos conversões de página de código são necessárias. 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 do servidor.
As páginas de código que um cliente usa são determinadas pelas configurações do sistema operacional. Para definir páginas de código de cliente no sistema operacional Windows, use Configurações Regionais no Painel de Controle.
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. Isso pode ocorrer quando você move dados de um servidor Unicode para um cliente não Unicode. A melhor opção pode ser atualizar o sistema operacional do cliente para que as ordenações de sistema subjacentes sejam atualizadas. 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.
Você também pode tentar usar uma ordenação diferente para os dados no servidor. Escolha uma ordenação que será mapeada para uma página de código no cliente.
Para usar as ordenações UTF-16 disponíveis no SQL Server 2019 (15.x), você pode selecionar uma das ordenações de caracteres _SC suplementares (somente ordenações do Windows) para melhorar a pesquisa e a classificação de alguns caracteres Unicode.
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. É uma boa prática padronizar a ordenação usada em sistemas em toda a sua organização e implantar servidores e clientes Unicode sempre que possível.
Em muitas situações, o SQL Server interagirá 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. ClientesSQL Server são de um destes dois tipos principais:
Clientes Unicode que usam o OLE DB e o Open Database Connectivity (ODBC) versão 3.7 ou uma versão posterior.
Clientes não Unicode que usam DB-Library e ODBC versão 3.6 ou uma versão anterior.
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.
| Servidor | Cliente | Benefícios ou limitações |
|---|---|---|
| Unicode | Unicode | Como os dados Unicode serão usados em todo o sistema, esse cenário fornece o melhor desempenho e proteção contra corrupção de dados recuperados. Essa é a situação com o ADO (ActiveX Data Objects), o OLE DB e o ODBC versão 3.7 ou uma versão posterior. |
| Unicode | Não Unicode | Nesse cenário, especialmente com conexões entre um servidor que está executando um sistema operacional mais recente e um cliente que está executando uma versão mais antiga do SQL Server ou em um sistema operacional mais antigo, pode haver limitações ou erros ao mover dados para um computador cliente. Os dados Unicode no servidor tentarão associar-se a uma página de código correspondente no cliente sem suporte Unicode para realizar a conversão dos dados. |
| Não Unicode | Unicode | Essa não é uma configuração ideal para usar dados multilíngues. Não é possível gravar dados Unicode no servidor não Unicode. É provável que ocorram problemas quando os dados forem enviados para servidores que estejam fora da página de código do servidor. |
| Não Unicode | Não Unicode | Este é um cenário muito limitado para dados multilíngues. Você pode usar uma única página de código. |
Caracteres suplementares
O SQL Server fornece tipos de dados, como nchar e nvarchar para armazenar dados Unicode. Esses tipos de dados codificam texto em um formato chamado UTF-16. O Consórcio Unicode aloca cada caractere um ponto de código exclusivo, que é um valor no intervalo 0x0000 para 0x10FFFF. Os caracteres usados com mais frequência têm valores de ponto de código que se ajustarão a uma palavra de 16 bits na memória e no disco, mas caracteres com valores de ponto de código maiores que 0xFFFF exigem duas palavras de 16 bits consecutivas. Esses caracteres são chamados de caracteres suplementares e as duas palavras consecutivas de 16 bits são chamadas de pares alternativos.
Se você usar caracteres suplementares:
Caracteres suplementares podem ser usados apenas em operações de comparação e ordenação em versões de ordenação 90 ou superior.
Todas as ordenações de nível _100 dão suporte à classificação linguística com caracteres complementares.
Não há suporte para caracteres suplementares para uso em metadados, como em nomes de objetos de banco de dados.
Introduzida no SQL Server 2012, uma nova família de ordenações de caracteres suplementares (SC) pode ser usada com os tipos de dados
nchar,nvarcharesql_variant. Por exemplo:Latin1_General_100_CI_AS_SC, ou se estiver usando uma ordenação japonesa,Japanese_Bushu_Kakusu_100_CI_AS_SC.O sinalizador de SC pode ser aplicado a:
Ordenações do Windows versão 90
Classificações do Windows versão 100
O sinalizador SC não pode ser aplicado a:
Ordenações do Windows sem versão na versão 80
As ordenações primárias BIN ou BIN2
As ordenações do SQL*
A tabela a seguir compara o comportamento de algumas funções de cadeia de caracteres e operadores de cadeia de caracteres quando eles usam caracteres complementares com e sem uma ordenação SC.
| Função ou operador de cadeia de caracteres | Com uma ordenação SC | Sem uma ordenação SC |
|---|---|---|
|
CHARINDEX LEN PATINDEX |
O par substituto UTF-16 é contado como um único ponto de código. | O par alternativo UTF-16 é contado como dois pontos de código. |
|
ESQUERDA MUDAR REVERSO DIREITA SUBSTRING COISAS |
Essas funções tratam cada par substituto como um único ponto de código e funcionam conforme o esperado. | Essas funções podem dividir quaisquer pares alternativos e levar a resultados inesperados. |
| NCHAR | Retorna o caractere correspondente ao valor do ponto de código Unicode especificado no intervalo de 0 a 0x10FFFF. Se o valor especificado estiver no intervalo de 0 a 0xFFFF, um caractere será retornado. Para valores mais altos, é retornado o substituto correspondente. | Um valor maior que 0xFFFF retorna NULL em vez do substituto correspondente. |
| UNICODE | Retorna um ponto de código UTF-16 no intervalo de 0 a 0x10FFFF. | Retorna um ponto de código UCS-2 no intervalo de 0 a 0xFFFF. |
|
Corresponder a um caractere curinga Curinga – caracter(es) para não corresponder |
Há suporte para caracteres suplementares para todas as operações de curingas. | Não há suporte para caracteres suplementares para essas operações curinga. Há suporte para outros operadores curinga. |
Suporte GB18030
GB18030 é um padrão separado usado na República Popular da China para codificar caracteres chineses. Em GB18030, caracteres podem ter 1, 2 ou 4 bytes em comprimento. OSQL 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. Depois que eles são armazenados no servidor, eles são tratados como caracteres Unicode em qualquer operação subsequente. Você pode usar qualquer ordenação em chinês, preferivelmente a mais recente versão 100. Todas as ordenações de nível _100 dão suporte à classificação linguística com caracteres GB18030. Se os dados incluirem caracteres suplementares (pares alternativos), você poderá usar as ordenações SC disponíveis no SQL Server 2019 (15.x) para melhorar a pesquisa e a classificação.
Suporte a scripts complexos
OSQL Server oferece suporte à inserção, armazenamento, alteração e exibição de scripts complexos. Os scripts complexos incluem o seguinte:
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 cujos caracteres alteram de forma de acordo com sua posição ou quando combinados com outros caracteres, como caracteres árabes, índicos e tailandeses.
Idiomas como tailandês que exigem dicionários internos para reconhecer palavras pelo fato de não haver espaços entre elas.
Aplicativos de banco de dados que interagem com o SQL Server devem usar controles que oferecem suporte a scripts complexos. Os controles de formulário padrão do Windows criados no código gerenciado são habilitados para scripts complexos.
Tarefas Relacionadas
| Tarefa | Tópico |
|---|---|
| Descreve como definir ou alterar a ordenação da instância de SQL Server. | Definir ou alterar a ordenação do servidor |
| Descreve como definir ou alterar a ordenação de um banco de dados de usuário. | Definir ou alterar a ordenação de banco de dados |
| Descreve como definir ou alterar a ordenação de uma coluna no banco de dados. | Definir ou alterar a ordenação de coluna |
| Descreve como retornar informações de ordenação ao servidor, banco de dados ou nível de coluna. | Exibir informações de ordenação |
| Descreve como escrever instruções Transact-SQL que as tornarão mais portáteis de um idioma para outro ou dão suporte a vários idiomas com mais facilidade. | Gravar instruções Transact-SQL internacionais |
| 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. | Definir um idioma de sessão |
Conteúdo relacionado
Práticas recomendadas para alteração em ordenações do SQL Server
"Migração de práticas recomendadas do SQL Server para Unicode"
Consulte Também
Ordenações de banco de dados contidas
Escolher um idioma ao criar um índice de texto completo
sys.fn_helpcollations (Transact-SQL)