Pourquoi est-Latin1_General_CS_AS pas sensible à la casse?

Pour LIKE des requêtes, le Latin1_General_CS_AS classement n'est pas sensible à la casse. Selon un rapport de bug de Microsoft, cela a été répertorié comme "By Design".

Cependant, la Latin1_General_Bin classement est également sensible à la casse et fonctionne exactement comme prévu pour LIKE requêtes.

Vous pouvez voir la différence dans cette requête simple:

SELECT
    MyColumn AS Latin1_General_Bin
FROM MyTable
WHERE MyColumn LIKE '%[a-z]%' COLLATE Latin1_General_Bin;

SELECT
    MyColumn AS Latin1_General_CS_AS
FROM MyTable
WHERE MyColumn LIKE '%[a-z]%' COLLATE Latin1_General_CS_AS;

SQL Violon Démo.


Mes questions sont:

  1. Pourquoi cela serait-il considéré comme "By Design" pour être sensible à la casse dans LIKE?
  2. Si c'est vraiment mieux, pourquoi est-il une différence de comportement entre les deux sensibles à la casse classements _Bin et _CS_AS?

J'allais à normaliser sur Latin1_General_CS_AS pour tous les cas des bases de données sensibles à l'avenir, mais cela semble être un subtil requête bug en attente de se produire.

  • Je ne suis pas sûr que cela signifie que Latin1_General_CS_AS n'est pas sensible à la casse. La modification de la requête avec LIKE '%[abcdefghijklmnopqrstuvwxyz]%' COLLATE Latin1_General_CS_AS; semble fonctionner. Le problème semble être la façon dont l' %[a-z]% est de choisir les personnages
  • Pour la même raison que ce dba.stackexchange.com/a/34731. Elle est bien documentée et par la conception. La gamme correspond à l'ordre de tri des classements. Vous pouvez imaginer qu'il recherche dans un index avec la colonne de la clé au début de la plage et à la suite de l'index jusqu'à la fin de la plage de retourner les choses en route.
  • cela semble être une gamme de "problème"... si vous utilisez LIKE '%e%' ou LIKE 'e' (suggéré dans le rapport de bug), vous obtenez le exprected résultat (aucun), mais LIKE '%[d-f]%' retourne le mauvais résultat (oui)
  • Merci pour le lien. J'ai pensé que ce serait quelque chose comme ça à partir de l'élément de connexion.
InformationsquelleAutor arserbin3 | 2014-06-13