Parece haver algo especial sobre 'tR' no agrupamento vietnamita. Appreicate se alguém que sabe sobre isso pode explicar em termos simples. Esse problema foi descoberto durante a instalação do nosso produto em um SQL Server agrupado "vietnamita". Uma das tabelas no esquema tem 'tR' em seu nome, mas um procedimento armazenado está referenciando a tabela em todas as letras minúsculas 'tr'. E esta referência falha.
Acho que essa situação é análoga a '阝' combinando 'ss' em outros agrupamentos.
Aqui está uma reprodução:
select case when 'tr' = 'tR' COLLATE SQL_Latin1_General_CP1_CI_AS then 'match' else 'no match' end
select case when 'tr' = 'tR' COLLATE Vietnamese_CI_AI then 'match' else 'no match' end
select case when 'tr' = 'TR' COLLATE Vietnamese_CI_AI then 'match' else 'no match' end
Resultados:
-----
match
--------
no match
-----
match
O segundo T-SQL produz a incompatibilidade. Outras combinações de 't' e 'R' não.
Dado que esse comportamento está presente na versão mais recente desse agrupamento e que combinações como "fr" e "fR" correspondem (como esperado), só podem ser regras linguísticas específicas da cultura para essa combinação de caracteres.
Encontrei a regra no arquivo de peso de classificação ** . É a combinação de "tr" que é especial (em vietnamita), não "tR". Parece que o vietnamita tem certas combinações de letras que se combinam para formar um único caractere, como as combinações "CH" e "LL" em espanhol. Portanto, as seguintes combinações são válidas para o "caracter" que "T" + "R" se combinam para formar em vietnamita:
A combinação de "tR" não forma o caractere "TR", provavelmente porque essa é uma capitalização não natural que mais implica separação de palavras, como com Pascal / Camel -casing (por exemplo, "Cha tR oom" e "cha tR oom", respectivamente, em oposição a " tR ogdor the Burninator ") (adivinhação educada de minha parte) .
O exemplo a seguir mostra que a combinação "tr" classifica após "tz":
Esses resultados são devidos à combinação de "tr" para formar um único caractere que classifica naturalmente após "t". Ou seja, o algoritmo de classificação vê o seguinte:
Vietnamita tem outras combinações de duas letras que funcionam da mesma forma que "TR" (ou seja, não diferencia maiúsculas de minúsculas:
tr == Tr == TR <> tR
):Para obter mais informações sobre como trabalhar com agrupamentos / codificações / Unicode, visite meu site: Informações de agrupamentos
** Um arquivo de peso de classificação contém pontos de código e seus respectivos valores de peso que são separados em categorias, como peso diacrítico, peso de caso etc. Geralmente, há seções que descrevem transformações, como combinar dois pontos de código para ser um único peso para um determinada cultura/localidade (por exemplo, vietnamita). Pode haver mapeamentos para decompor caracteres pré-compostos em caracteres individuais, etc. Consulte: Acessando a Tabela de Peso de Classificação do Windows .
NOTA: A Microsoft fornece vários arquivos de peso de classificação, pois eles foram atualizados ao longo dos anos à medida que novas versões do Windows e do Windows Server foram lançadas. Lembre-se de que nenhum desses arquivos corresponde 100% às regras que o SQL Server usa. O mais próximo que chegamos é o arquivo Tabela de Peso de Classificação do Windows Server 2008.txt , que deve corresponder ao comportamento dos agrupamentos da versão 100 (ou seja, aqueles com
_100_
nomes).