IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Case/Accent (In)Sensitive. Qu'est ce que ca implique en concret?


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 108
    Points : 52
    Points
    52
    Par défaut Case/Accent (In)Sensitive. Qu'est ce que ca implique en concret?
    Bonjour. Dans la collation, le prof nous a dit qu'on devait utiliser French_CI_AI. Mais j'ai un doute, il a peut être dit CI_AS.

    Je ne sais plus mais pour faire mon choix j'aimerais bien connaitre les implications concrètes de Sensitive et Insensitive.

    Je parle tout haut et je suis désolé mais ca vous permettra de voir si je suis ou non dans l'erreur. Case concerne les majuscules et minuscules, et Accent concerne les accents. Sensitive veut dire que pour un champ nom, le contenu 'Gérard' et 'gérard' sont deux termes différents alors que insensitive veut dire que ces 2 contenus sont identiques, ce qui implique que la contrainte d'unicité me forcera à changer mon contenu...?


    La collation est appliquée où exactement. Uniquement dans le contenu des champs, ou bien dans le contenu des champs ET dans le nom des champs?
    En pratique les noms de schéma/tables/champs/... je ne mets aucun accent (tInvite, sReception, idInvite).

    J'aimerais que vous m'expliquiez avec des exemples, quand mettre insensitive ou sensitive pour accent/case dans la collation?

    Merci et désolé si ce sujet a déjà été abordé

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    C'est simple :

    AS : a <> à <> â ; e <> é <> è <> ê <> ë

    AI : a = à = â ; e = é = è = ê = ë

    Cela n'impacte pas le stockage des données : les accents sont correctement stockés et restitués.

    En revanche, cela induit des différentes lors des comparaisons et des tris (<, <=, =, <>, >, >=, LIKE, ORDER)
    Mais cela ne s'applique pas au fonctions de regroupement GROUP BY : car même si "âne = ane", les deux données sont belles et ben différentes.

    Exemple de tri :

    AI CI

    Amélie
    âne
    année
    Avril

    AI CS

    Amélie
    Avril
    âne
    année

    AS CS

    Amélie
    Avril
    année
    âne

    AS CI

    Amélie
    année
    Avril
    âne

    Enfin, la collation ne s'applique qu'aux données.
    Et elle peut être différente colonne par colonne (on peut en spécifier une à la création des tables).
    Et elle peut être forcée au moment des comparaisons.

    J'espèce que c'est plus clair
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 108
    Points : 52
    Points
    52
    Par défaut
    Merci beaucoup pour ta réponse, cela me semble beaucoup plus clair ainsi...
    Beau dimanche!

  4. #4
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Stockage des données : les accents sont correctement stockés et restitués.

    En revanche, cela induit des différentes lors des comparaisons et des tris (<, <=, =, <>, >, >=, LIKE, ORDER)
    Mais cela ne s'applique pas au fonctions de regroupement GROUP BY : car même si "âne = ane", les deux données sont belles et ben différentes.
    Euh, si, forcément, ça s'applique aussi au group by : ce dernier est fait par des comparaisons.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WITH T AS (
    SELECT 'é' COLLATE Latin1_General_CI_AI as v 
    UNION ALL 
    SELECT 'e'
    UNION ALL 
    SELECT 'ê'
    )
    SELECT * FROM T
    GROUP BY v
    => Une seule ligne retournée.

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    J'avoue que je me suis posé la question.

    Ca me semblait logique que ça s'applique aussi à GROUP BY.

    Mais en cas de valeurs différentes, égales au niveau COLLATION, laquelle choisit-il dans le jeu de résultat ? La première trouvée ? Une règle particulière ?
    Car en algèbre ensembliste, les données ne sont pas ordonnées donc "la première trouvée" va donner des résultats différents d'une fois sur l'autre...
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    J'aurais tendance à dire "la première", en effet. Ensuite les autres valeurs sont jugées "égales", même si nous autres humains voyons une différence
    D'ailleurs dans le code que j'ai donné, la réponse est "é", mais si on change l'ordre des UNION ALL, alors on change le résultat (de notre point de vue, pas du point de vue du SGBD à qui on a dit "ne t'inquiète pas, é = e = ê").

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    La collation sert à gérer le comportement globale des chaines de caractères vis à vis de paramètres tels que :
    1) la sensibilité à la casse. CI : insensibilité, CS : sensibilité. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     'a' COLLATE French_CI_AS = 'A'
    2) la sensibilité aux caractères diacritique. AI : insensibilité, AS : sensibilité. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     'a' COLLATE French_CS_AI = 'à'
    Les caractères diacritiques étant composé de plusieurs symboles : la lettre "nue" et un ou plusieurs éléments complémentaires (accents, ligature...)
    3) la sensibilité à la largeur (corps) du caractère. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     '2' COLLATE French_CI_AI_WS <> '²'
    4) la sensibilité aux idéogramme du japonais écrit en katakana (forme "bâton", équivalent aux caractères d'imprimerie en France et servant en général à la titraille) ou hiragana (forme cursive, équivalent à l'écriture cursive des écoliers et servant aux textes littéraires). Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N'かわ' <> N'カワ' COLLATE French_CI_AI_KS
    5) au tri spécifique à la langue considérée. Par exemple en Français la règle des accents fait que le mot "élève" précède la mot "élevé" dans le tri alphabétique.

    Ceci concerne toutes les comparaisons et les tris donc :
    1) les contraintes d'unicité et les clefs primaires
    2) les opération de dédoublonnement comme DISTINCT et UNION
    3) les tris comme ORDER BY
    4) les comparaisons comme =, <, <=, >,>=, BETWEEN, IN, ALL, ANY, SOME

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Est ce que ce use case est juste ?
    Par dark_angel91 dans le forum Cas d'utilisation
    Réponses: 2
    Dernier message: 23/06/2011, 17h18
  2. Réponses: 6
    Dernier message: 28/12/2007, 02h04
  3. Qu'est ce que le cache ?
    Par irrou dans le forum Assembleur
    Réponses: 4
    Dernier message: 24/11/2002, 23h28
  4. Qu'est-ce que c'est que Nessus, ça fait quoi exactement ?
    Par PeterT dans le forum Développement
    Réponses: 3
    Dernier message: 24/07/2002, 11h23
  5. Réponses: 3
    Dernier message: 19/07/2002, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo