Agrupamento e terminologia internacional

Os agrupamentos do 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. Os agrupamentos utilizados 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. Independentemente de você estar 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 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 trabalhará.

Ao selecionar um agrupamento 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. Por exemplo, ao construir uma consulta usando ORDER BY, a ordem de classificação de seu conjunto de resultados pode depender do agrupamento aplicado ao banco de dados ou ditado em uma cláusula COLLATE no nível de expressão da consulta.

Um agrupamento pode conter qualquer uma das seguintes características ou todas elas:

  • Diferenciação de maiúsculas e minúsculas

  • Distinção de acentos

  • Distinção de Kana

  • Distinção de largura

Para usar o suporte a agrupamentos do SQL 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.

Termos

  • Agrupamento

  • Localidade

  • Unicode

  • Página de código

  • Tipos de dados

  • Ordem de classificação

Agrupamento

Um agrupamento especifica os padrões de bit que representam cada caractere em um conjunto de dados. Os agrupamentos também determinam as regras que classificam e comparam dados. O SQL Server dá suporte ao armazenamento de objetos com diferentes agrupamentos em um único banco de dados. Para colunas não-Unicode, a configuração de agrupamento 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 de origem 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 agrupamento diferentes. Se possível, use um agrupamento padronizado para sua organização. Deste modo, não será preciso especificar o agrupamento explicitamente em todo caractere ou expressão Unicode. Se você deve trabalhar com objetos que tenham configurações de agrupamento e página de códigos diferentes, codifique suas consultas para considerar as regras da precedência de agrupamento. Para obter mais informações, consulte Precedência de agrupamento (Transact-SQL).

As características de um agrupamento fazem diferenciação de idioma, de maiúsculas e minúsculas, de acentos, de caracteres Kana e de largura.

Os agrupamentos do SQL Server incluem os seguintes conjuntos de agrupamentos:

  • Agrupamentos do Windows
    Os agrupamentos do Windows definem regras para o armazenamento de dados de caractere baseadas em uma localidade de sistema do Windows associada. No caso de um agrupamento do Windows, a comparação de dados não-Unicode é implementada usando o mesmo algoritmo que os dados Unicode. As regras de base de agrupamentos 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. 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 proporciona consistência entre os tipos de dados no SQL Server e também permite que os desenvolvedores classifiquem as cadeias de caracteres nos aplicativos usando as mesmas regras utilizadas pelo SQL Server. Para obter mais informações, consulte Configurações de agrupamento na Instalação.

  • Agrupamentos binários
    Os agrupamentos binários classificam os dados com base na seqüência de valores codificados definidos pela localidade e pelo tipo de dados. Eles fazem diferenciação de maiúsculas e minúsculas. Um agrupamento binário no SQL Server define a localidade e a página de código ANSI que devem ser usadas. Isso impõe uma ordem de classificação binária. Como são relativamente simples, os agrupamentos binários ajudam melhorar o desempenho de aplicativo. 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. Para tipos de dados Unicode, as comparações de dados têm como base os pontos de código Unicode. Para agrupamentos binários em tipos de dados Unicode, a localidade não é considerada em classificações de dados. Por exemplo, Latin_1_General_BIN e Japanese_BIN geram resultados de classificação idênticos quando usados em dados Unicode.

    Os agrupamentos binários em versões anteriores do SQL Server comparavam o primeiro caractere como WCHAR, seguido por uma comparação byte a byte. Por motivos de compatibilidade com versões anteriores, a semântica de agrupamento binário existente não será alterada.

    Os agrupamentos binários nesta versão do SQL Server incluem um conjunto de agrupamentos de comparação de ponto de código puro. É possível migrar para os agrupamentos binários e aproveitar as vantagens das verdadeiras comparações de ponto de código. Você deve usar os agrupamentos binários para desenvolver novos aplicativos. O sufixo BIN2 identifica nomes de agrupamentos que implementam a nova semântica de agrupamento de ponto de código. Também existe um sinalizador de comparação que corresponde a BIN2 para a nova classificação binária. Para obter mais informações, consulte Diretrizes para o uso de agrupamentos BIN e BIN2.

  • SQL Server
    Os agrupamentos (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 não são compatíveis com nenhuma 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 os agrupamentos 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 Usando agrupamentos do SQL Server.

    ObservaçãoObservação

    Quando você atualiza uma instância em português do SQL Server, os agrupamentos (SQL_*) do SQL Server podem ser especificados para compatibilidade com instâncias existentes do SQL Server. Como o agrupamento padrão de uma instância do SQL Server é definido durante a instalação, é importante especificar as configurações de agrupamento com cuidado quando as seguintes afirmações forem verdadeiras:

    • Seu código de aplicativo depende do comportamento de agrupamentos anteriores do SQL Server.

    • Você irá usar a replicação do SQL Server com instalações existentes do SQL Server 6.5 ou SQL Server 7.0.

    • Você deve armazenar dados de caractere que refletem vários idiomas.

Há suporte para configurar agrupamentos nos seguintes níveis de uma instância do SQL Server:

  • Agrupamentos no nível do servidor
    O agrupamento padrão é definido durante a instalação do SQL Server e também se torna o agrupamento padrão dos bancos de dados do sistema. Observe que os agrupamentos somente Unicode não podem ser selecionados durante a instalação do SQL Server, pois eles não são suportados como agrupamentos no nível de servidor.

    Depois que um agrupamento for atribuído a qualquer objeto que não seja uma coluna ou um banco de dados, você não poderá alterar o agrupamento, exceto pelo descarte e recriação do objeto. Em vez de alterar o agrupamento padrão de uma instância do SQL Server, você pode especificar o agrupamento no momento da criação de um novo banco de dados ou coluna de banco de dados.

    Para consultar o agrupamento do servidor para uma instância do SQL Server, use a seguinte função Transact-SQL SERVERPROPERTY:

    SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
    

    Para consultar o servidor por todos os agrupamentos disponíveis, use a seguinte função interna fn_helpcollations():

    SELECT * from ::fn_helpcollations()
    
  • Agrupamentos do nível do banco de dados
    Quando um banco de dados é criado, você pode usar a cláusula COLLATE da instrução CREATE DATABASE para especificar o agrupamento padrão do banco de dados. Se nenhum agrupamento for especificado, o agrupamento padrão do banco de dados modelo será atribuído ao banco de dados. O agrupamento do banco de dados modelo é o mesmo do agrupamento padrão da instância do SQL Server.

    O agrupamento de um banco de dados do usuário pode ser alterado usando uma instrução ALTER DATABASE semelhante à seguinte:

    ALTER DATABASE myDB COLLATE Greek_CS_AI
    

    O agrupamento atual de um banco de dados pode ser recuperado usando-se uma instrução semelhante à seguinte:

    SELECT CONVERT (varchar, DATABASEPROPERTYEX('database_name','collation'))
    
    ObservaçãoObservação

    A alteração do agrupamento no nível de banco de dados não afeta os agrupamentos no nível de coluna ou de expressão.

  • Agrupamentos no nível da coluna
    Quando você cria uma tabela, pode especificar agrupamentos para cada coluna de cadeia de caracteres, usando a cláusula COLLATE da instrução CREATE TABLE. Se nenhum agrupamento for especificado, o agrupamento padrão do banco de dados será atribuído à coluna.

    O agrupamento de uma coluna pode ser alterado usando uma instrução ALTER TABLE semelhante à seguinte:

    ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Greek_CS_AI
    
  • Agrupamentos no nível da expressão
    Os agrupamentos no nível de expressão são definidos 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 de localidade. Use uma cláusula COLLATE como a seguinte para implementar agrupamentos no nível da expressão:

    SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI
    

Voltar ao início

Localidade

Uma localidade é um conjunto de informações associadas a um local ou a uma cultura. 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. Os agrupamentos podem ser associados a uma ou mais localidades.

Voltar ao início

Unicode

Se você armazenar dados de caractere que refletem vários idiomas, sempre use tipos de dados Unicode (nchar, nvarchar e ntext) em vez dos tipos de dados não-Unicode (char, varchar e text).

Limitações consideráveis estão associadas a tipos de dados não-Unicode. Isso ocorre porque um computador não-Unicode fica limitado a usar uma única página de código. 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. Os agrupamentos Unicode devem ser selecionados individualmente no nível de banco de dados, coluna ou expressão porque não têm suporte no nível de servidor.

As páginas de código usadas por um cliente são determinadas pelas configurações do sistema operacional. Para definir páginas de código de cliente nos sistemas operacionais Windows 2000, Windows XP, Windows Server 2003 ou Windows Server 2008, use Configurações Regionais no Painel de Controle.

Quando você move dados de um servidor para um cliente, o agrupamento do servidor pode não ser reconhecido por drivers de cliente mais antigos. Isso pode acontecer 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 os agrupamentos de sistema subjacentes sejam atualizados. 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 um agrupamento diferente para os dados no servidor. Escolha um agrupamento que será mapeado para uma página de código no cliente. Para obter mais informações, consulte o tópico "Definindo e alterando agrupamentos" nos Manuais Online do SQL Server.

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 o agrupamento usado nos sistemas de sua organização e implantar servidores e clientes Unicode sempre que possível. Para obter mais informações sobre Unicode, consulte o Site do Consórcio Unicode.

Na maioria das situações, o SQL Server irá 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. Os clientes do SQL Server são de um destes dois tipos principais:

  • Clientes Unicode que usam OLE DB e ODBC versão 3.7 ou posterior.

  • Clientes não-Unicode que usam DB-Library e ODBC versão 3.6 ou anterior.

A tabela a seguir fornece informações sobre como usar dados multilíngües 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, este cenário fornece o melhor desempenho e proteção contra danos de dados recuperados. É isso que acontece com ADO (ActiveX Data Objects), OLE DB e ODBC versão 3.7 ou posterior.

Unicode

Não-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 Server ou em um sistema operacional mais antigo, pode haver limitações ou erros quando você move os dados para um computador cliente. Os dados Unicode no servidor tentarão mapear para uma página de código correspondente no cliente não-Unicode para converter os dados.

Não-Unicode

Unicode

Esta não é uma configuração ideal para usar dados multilíngües. 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íngües. Você pode usar uma única página de código.

Se houver erros ou se você tiver dificuldades quando mover dados de um servidor para um cliente, especificamente de um servidor Unicode para um cliente não-Unicode, o agrupamento do servidor poderá não ser reconhecido pelos drivers cliente mais antigos. Nessa situação, a melhor opção pode ser atualizar o sistema operacional do cliente para que os agrupamentos de sistema subjacentes sejam atualizados. 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 um agrupamento diferente para os dados no servidor. Escolha um agrupamento que será mapeado para uma página de código no cliente. Para obter mais informações sobre como alterar os agrupamentos, consulte o tópico "Definindo e alterando agrupamentos no SQL Server" nos Manuais Online do SQL Server. Para obter mais informações sobre como alterar agrupamentos, consulte o white paper sobre SQL Serverpráticas recomendadas para alterações em agrupamentos . Para obter mais informações sobre como migrar tipos de dados não-Unicode para Unicode, consulte o white paper sobre SQL Serverpráticas recomendadas de migração para Unicode.

Tópicos relacionados:, Noções básicas sobre Unicode.

Voltar ao início

Página de código

Uma página de código é um conjunto ordenado de caracteres 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ódigos do Windows geralmente é referida como um conjunto de caracteres ou um 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.

Todos os agrupamentos Unicode do Windows Server 2008 são baseados em Unicode 5.0.

Voltar ao início

Tipos de dados

Um tipo de dados é uma definição que especifica uma faixa de valores, as operações que podem ser executadas nos valores e como eles são armazenados em memória. A definição de tipos de dados permite que o SQL Server manipule dados de maneira previsível. Os tipos de dados de caracteres não-Unicode são char, varchar e text. Os tipos de dados Unicode são nchar, nvarchar e ntext. É recomendável que você use tipos de dados Unicode em seus aplicativos, principalmente se armazenar dados de caractere que refletem vários idiomas.

Para obter mais informações sobre como migrar tipos de dados não-Unicode para Unicode, consulte o white paper sobre SQL Serverpráticas recomendadas de migração para Unicode.

Tópicos relacionados:Tipos de dados (Mecanismo de Banco de Dados), Tipos de dados (Transact-SQL), Tipos de dados do Integration Services

Voltar ao início

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 agrupamentos e podem ser otimizados com o uso de índices.

Tópicos relacionados:Estilos de classificação de agrupamento do Windows, Índices

Voltar ao início

Consulte também

Referência