Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Clé primaire insensible à la casse de type nvarchar où ß !=ss

Ah, mais c'est l'est possible car il existe une collation qui gère cela naturellement (plusieurs en fait, mais toutes dans la même "famille") :Hungarian_Technical_* (enfin, moins les variations CaseSensitive (CS) et Binary (BIN / BIN2)). Bien sûr, je ne suis toujours pas sûr que ce soit un bon choix pour un PK, mais il n'y a aucune raison pour que ce ne soit pas un 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]);

Résultats :

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

Il y a 24 classements au total qui fonctionneront de cette manière. Vous pouvez les trouver via :

SELECT hc.*
FROM sys.fn_HelpCollations() hc
WHERE hc.name LIKE N'Hungarian[_]Technical%'
AND hc.name LIKE N'%[_]CI%'
ORDER BY hc.name;

Ce sont :

Si la version 100 classements sont disponibles (ce qui signifie :vous utilisez SQL Server 2008 ou une version plus récente), utilisez-les et non les classements sans numéro de version dans leurs noms.

MODIF :
J'ai trouvé des informations supplémentaires sur la collation "Hungarian Technical" qui pourraient vous intéresser :

  • MySQL :classement hongrois -- Il s'agit d'une archive d'une discussion listserv par certains développeurs MySQL essayant de comprendre les spécificités de la façon d'implémenter le classement. Apparemment, il a des règles complexes, dues au moins en partie à la nécessité d'assimiler plusieurs caractères en un seul caractère pour le tri (recherchez la section "3. Règle digraphe/trigraphe spéciale"). Cela pourrait provoquer un comportement inattendu. Les combinaisons de lettres spécifiques sont notées dans cette section, ce qui facilite au moins la configuration d'un scénario de test pour aider à déterminer si les règles de tri sont invalidées à l'aide de ce classement.

  • Pourquoi y a-t-il autant de (106) classements hongrois ? -- Il s'agit d'une discussion sur social.msdn qui contient des informations intéressantes. Il y a là un commentaire d'Erland Sommarsko dans lequel il déclare :

    Compte tenu de la discussion des développeurs MySQL sur les règles complexes, ces résultats de test ne semblent pas si surprenants.

Donc, ces deux éléments devraient probablement être pris en compte pour décider s'il faut ou non choisir la voie facile consistant simplement à définir le champ NVARCHAR sur l'un de ces classements techniques hongrois, ou suivre la recommandation de @ GarethD concernant la colonne calculée.

Pour plus d'informations sur l'utilisation des chaînes et des classements, veuillez consulter :Informations sur les classements