Quais seriam alguns bons motivos para não usar o agrupamento SQL_Latin1_General_CI_AS em um sistema que lida com dados em inglês, alemão, japonês e chinês?
Estou tendo muita dificuldade em encontrar boas fontes que comparem agrupamentos e respondam à minha pergunta acima, bem como à seguinte
- Como Japanese_CI_AS é diferente de SQL_Latin1_General_CI_AS quando se trata de classificar caracteres não japoneses?
- O UCA é classificado de forma diferente de Japanese_CI_AS e SQL_Latin1_General_CI_AS?
- Qual é a prática padrão da indústria para sistemas usados globalmente? (Por exemplo, o que Facebook, Twitter, Google, Flickr, Baidu ou Microsoft, IBM e SAP usam?)
- SQL_Latin1_General_CI_AS define uma ordem de classificação para caracteres japoneses? Se não, como/por que o texto em japonês funciona no SQL_Latin1_General_CI_AS?
Basicamente, estou tentando aprender como escolher o agrupamento apropriado :)
Desde já, obrigado!
Os agrupamentos no SQL Server lidam com vários aspectos dos dados de string:
Localidade/ LCID (referindo-se à Cultura: en-US, fr-FR, etc)
Isso é usado para determinar substituições específicas de cultura para a classificação linguística padrão e regras de comparação usadas por Unicode /
NVARCHAR
dados em todos os agrupamentos, bem como não-Unicode /VARCHAR
dados para Windows (ou seja, não-SQL_
) agrupamentos.Página de código
Este é o conjunto de caracteres usado para não-Unicode/
VARCHAR
em todos os Collations. Para ser claro, as páginas de código não se aplicam a Unicode /NVARCHAR
dados, pois o Unicode é um conjunto de caracteres único. E, para ser bem claro, o Unicode é um único conjunto de caracteres, independentemente de como é codificado: UTF-8, UTF-16 ou UTF-32.Sensibilidade
A sensibilidade de maiúsculas e minúsculas e acentos pode ser controlada em todos os agrupamentos. A sensibilidade de Kana e Width só pode ser controlada ao usar os agrupamentos do Windows e é considerada "insensível" ao usar os
SQL_
agrupamentos.Além disso, todos os agrupamentos do Windows devem ter uma opção binária (pelo menos o obsoleto
_BIN
, se não também_BIN2
), enquanto existem apenas doisSQL_
agrupamentos que têm as opções_BIN
/_BIN2
:SQL_Latin1_General_CP850
eSQL_Latin1_General_CP437
.Capacidade de lidar com caracteres suplementares
Um conjunto de Collations com nomes terminando em
_SC
foi adicionado no SQL Server 2012. Eles permitem a classificação/comparação adequada, bem como o manuseio por funções internas para UTF-16 Surrogate Pairs (que é como o UTF-16 codifica pontos de código acima de U+ PFFF). Esta opção não está disponível para nenhum dosSQL_
Agrupamentos.Observe que, independentemente do agrupamento, todos os dados UTF-16 podem ser armazenados e recuperados sem qualquer perda de dados em
NVARCHAR
/NCHAR
/XML
colunas e variáveis, mesmo que o agrupamento não permita a interpretação adequada de caracteres suplementares.Além disso, existem algumas diferenças de comportamento para não-Unicode/
VARCHAR
dados somente ao usarSQL_
Collations:CHAR(0)
não equivale a uma string vazia.SQL_Latin1_General_CP1_CS_AS
, ), os caracteres maiúsculos serão classificados antes dos caracteres minúsculos.a-f
classifica antesaa
de usar String-sort, mas depois quando usa Word-sort).'æ' = 'ae'
)Há, no entanto, consistência comportamental entre
NVARCHAR
os dados que usam qualquer agrupamento eVARCHAR
os dados que usam um agrupamento do Windows.Portanto, idealmente, os
SQL_
Collations não devem ser usados dadas as restrições e diferenças acima, sem mencionar que eles também estão obsoletos (e existem apenas 77 deles e 3810 Windows Collations no SQL Server 2014). Se for o caso, tente usar a versão mais recente de um Collation específico (por exemplo_100_
, ) e, se oferecido, use uma terminação em_SC
.Infelizmente,
SQL_Latin1_General_CP1_CI_AS
é o padrão ao instalar uma nova instância nos EUA (pelo menos). Mas não se deve escolher voluntariamente umSQL_
Collation para um novo desenvolvimento, especialmente quando é necessário lidar com várias culturas.Mas para responder às 4 perguntas adicionais:
Isso é
NVARCHAR
apenas com relação aos dados, certo? O LCID determina quais substituições específicas de cultura aplicar às opções de classificação padrão. Suspeito que os caracteres do inglês dos EUA classificarão o mesmo entre os agrupamentos japonês e latino1, mas não tenho certeza se isso vale para outros idiomas que também usam esses caracteres ou para caracteres não encontrados no inglês dos EUA, como letras com acentos. E uma complicação adicional é que você já tem as duas letras com acentos e, em seguida, letras sem os acentos combinadas apenas com os acentos (ou seja, combinando caracteres) e essas coisas podem não ser iguais nas localidades inglês/alemão/japonês/chinês.Não tenho certeza se essa pergunta faz sentido. Há uma ordem de classificação padrão dada a todos os caracteres. Em seguida, cada localidade pode substituir (substituir ou remover) qualquer um desses padrões ou adicionar novas regras. Portanto, o UCA é o peso base dos caracteres, mas cada cultura pode se desviar desses padrões. Portanto, haverá uma grande quantidade de sobreposição nas regras, mas também uma grande quantidade de variação entre elas.
Não tenho certeza do que essas empresas fazem exatamente, mas duvido que sejam pré-indexadas com regras linguísticas específicas da cultura. Pelo menos não em TODOS os dados. A maioria dos sites solicita seu idioma preferido e pode usá-lo para lidar com alguns dos dados. De qualquer forma, não há como ter uma classificação única e verdadeiramente independente da cultura.
Não tenho certeza do que significa o texto em japonês "trabalhando", mas o Unicode é um conjunto de caracteres único para todos os idiomas. Assim, a capacidade de armazenar os caracteres de um determinado idioma não implica nas regras pelas quais esses caracteres serão classificados.
Conforme mencionado acima, o UCA é uma ordem de classificação padrão para todos os caracteres. Os agrupamentos Latin1 podem fazer classificação básica em todos os idiomas (em termos de Unicode/
NVARCHAR
dados), mas teriam apenas as regras padrão. Os agrupamentos Latin1 não teriam nenhuma regra específica de cultura e pode haver vários conjuntos dessas regras. Além disso, conforme declarado acima, osSQL_
Collations não têm a capacidade de ativar a sensibilidade Kana ou Width, que você pode precisar.O roteiro a seguir deve deixar claro em relação à pergunta 1.
Agrupamento são as regras sobre como classificar , leia sobre isso . O script acima deve mostrar como as alterações de classificação têm uma aparência de como ele corresponde ao UCA .
Qualquer resposta seria baseada em opinião, a maioria das empresas acima não usa um único tipo de banco de dados (gráfico, bigdata, etc.), nunca precisei usar nada além de
SQL_Latin1_General_CP1_CI_AS
. (Eu nunca tive que trabalhar fora da Europa éter)Se você estiver usando
nvarchars
= você está usandounicode
e unicode é como Chuck Norris - cobre tudo (duas vezes).