Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Chave primária que não diferencia maiúsculas de minúsculas do tipo nvarchar onde ß !=ss


Ah, mas é possível, pois existe um agrupamento que lida com isso naturalmente (vários na verdade, mas todos na mesma "família"):Hungarian_Technical_* (bem, menos as variações CaseSensitive (CS) e Binary (BIN / BIN2)). Claro, ainda não tenho certeza se esta é uma boa escolha para um PK, mas não há razão para não ser um UNIQUE INDEX .
SELECT tmp.*,
       IIF(tmp.[First] = tmp.[Second] COLLATE Hungarian_Technical_CI_AI,
           N'Equal',
           N'NOT EQUAL') AS [Result]
FROM (
      SELECT N'weiß', N'Weiß', N'Equal'
      UNION ALL
      SELECT N'weiss', N'Weiss', N'Equal'
      UNION ALL
      SELECT N'weiß', N'weiss', N'NOT Equal'
      UNION ALL
      SELECT N'Weiß', N'Weiss', N'NOT Equal'
      UNION ALL
      SELECT N'weiß', N'Weiss', N'NOT Equal'
      ) tmp ([First], [Second], [Ideal]);

Resultados:
First   Second  Ideal       Result
weiß    Weiß    Equal       Equal
weiss   Weiss   Equal       Equal
weiß    weiss   NOT Equal   NOT EQUAL
Weiß    Weiss   NOT Equal   NOT EQUAL
weiß    Weiss   NOT Equal   NOT EQUAL

Há 24 agrupamentos totais que funcionarão dessa maneira. Você pode encontrá-los através de:
SELECT hc.*
FROM sys.fn_HelpCollations() hc
WHERE hc.name LIKE N'Hungarian[_]Technical%'
AND hc.name LIKE N'%[_]CI%'
ORDER BY hc.name;

Eles são:

Se a versão 100 ordenações estão disponíveis (ou seja:você está usando o SQL Server 2008 ou mais recente), use-as e não as ordenações sem número de versão em seus nomes.

EDITAR:
Encontrei algumas informações adicionais sobre o agrupamento "Hungarian Technical" que podem ser de seu interesse:

  • MySQL:agrupamento húngaro -- Este é um arquivo de uma discussão do listserv por alguns desenvolvedores do MySQL tentando descobrir os detalhes de como implementar o agrupamento. Aparentemente, ele tem algumas regras complexas, devido, pelo menos em parte, à necessidade de equacionar vários caracteres em um único caractere para classificação (procure a seção "3. Regra especial de dígrafo/trígrafo"). Isso pode causar algum comportamento inesperado. As combinações de letras específicas são observadas nessa seção, portanto, pelo menos, facilita a configuração de um caso de teste para ajudar a determinar se as regras de classificação invalidam o uso desse agrupamento.

  • Por que existem tantos (106) agrupamentos húngaros? -- Esta é uma discussão no social.msdn que tem algumas informações interessantes. Há um comentário lá de Erland Sommarsko no qual ele afirma:

    Dada a discussão dos desenvolvedores do MySQL sobre as regras complexas, os resultados dos testes não parecem tão surpreendentes.

Portanto, esses dois itens provavelmente devem ser considerados para decidir se deve ou não seguir o caminho mais fácil de simplesmente definir o campo NVARCHAR para um desses agrupamentos técnicos húngaros ou seguir a recomendação do @GarethD da coluna computada.

Para obter mais informações sobre como trabalhar com strings e agrupamentos, visite:Informações de agrupamentos