Meilleur auteur de réponses
case sensibilité de SQL Server

Question
-
bonjour
Il semble que SQL server soit plus ou moins insensible a la case
Ainsi il reconnait le mot The comme existant face au mot the
or ces deux termes ne sont pas sémantiquement égaux.
Quel qu'un aurait il des informations sur ce problème?
Jean Noël Martin
Réponses
-
je ne sais pas quoi dire de plus. Il faut la collation des colonnes de la tables T_Word, je vous ai donné la requête pour répondre à cette demande.
- Marqué comme réponse JeanNoel53 mardi 2 septembre 2014 14:00
Toutes les réponses
-
Il y a différentes granularités de collation dans SQL Server.
La granularité Instance :
SELECT SERVERPROPERTY('Collation') AS [Collation]
La granularité Base de données :
SELECT name, collation_name FROM sys.databases
La ganularité Colonne :
SELECT o.name AS [Obj], c.name [Col], collation_name FROM sys.objects o INNER JOIN sys.columns c ON o.object_id = c.object_id
Dans votre cas, il est peut nécessaire que vous changiez la collation de la colonne en question en étant case sensitive (CS) et accent sensitive (AS). Si votre besoin est au dela, il est nécessaire de reconfigurer la base ou l'instance.
- Proposé comme réponse Ahmed KASMI lundi 1 septembre 2014 08:52
-
-
merci de l'info: Je vous propose de passer ensemble à l'implémentation:
"SELECT siIdPOS, nuIdWord FROM T_WORD WHERE vcString = @Text AND siIdPOS = @POS AND siIdLang = @idLang"
Dans ce cas le mot sensible a la case est contenu dans Text
Je dois donc y mettre de terme CS, mais ou?
Jean Noël Martin
-
Pour votre requête, je pense que l'écriture suivante devrait suffir :
SELECT siIdPOS, nuIdWord FROM T_WORD WHERE vcString COLLATE FRENCH_CS_AS = @Text AND siIdPOS = @POS AND siIdLang = @idLang
CS = Case sensitive (opposé de CI = Case Insensitive)
AS = Accent Sensitive (opposé de AI = Accent Insensitive)
Dans mon exemple, j'ai mis FRENCH car c'est comme ça que je travaille, je vous invite plutôt à vérifier la collation de la colonne vcString via la requête suivante :
USE [MaBase] GO SELECT o.name AS [Obj], c.name [Col], collation_name FROM sys.objects o INNER JOIN sys.columns c ON o.object_id = c.object_id WHERE o.name = 'T_WORD' AND c.name = 'vcString'
Mais dans le cas d'une généralité, il est préférable de changer directement la collation au niveau de la colonne lors de la création de la table.
-
Merci, je l'ai fait:
J'ai un problème à l'exécution dans une autre requète:
INSERT INTO T_WORD ( nuIDWord, vcString, siOccurrence, siIdPOS, siIdLang, nuIdLemma) VALUES ( @ID, @Text, @Ocurr, @POS, @Lang, @Lemma);
"Impossible d'insérer une ligne de clé en double dans l'objet « dbo.T_WORD » avec un index unique « T_WORD_uniqueness_IDX ». La valeur de clé dupliquée est ('the', 2, 2). L'instruction a été arrêtée."
peut on continuer l'implémentation?
Jean Noël Martin
- Modifié JeanNoel53 lundi 1 septembre 2014 14:47
-
Vous essayé d'insérer une ligne avec une combinaison des valeurs qui repose sur la contrainte unique (T_WORD_uniqueness_IDX).
Il faut donc que vous cherchiez pourquoi, vous avez déjà cette ligne. Il est peut-être possible que ça soit à cause de la collation.
Pour aller plus loin, il faut avoir la structure de la table T_WORD (avec les indexs et collation des colonnes)
-
Je vous donne ci joint le script de T_WORD:
CREATE TABLE T_WORD ( nuIdWord NUMERIC(18,0) NOT NULL identity, vcString VARCHAR(128) NOT NULL, siIdPOS SMALLINT NOT NULL, siOccurrence SMALLINT constraint T_WORDsiOccurrence_Chk CHECK ( (siOccurrence >= 1) OR (siOccurrence IS NULL) ) , siIdLang SMALLINT NOT NULL, nuIdLemma NUMERIC(18,0) NOT NULL, constraint T_WORD_PK PRIMARY KEY (nuIdWord));
et merci pour votre aide
Jean Noël Martin
-
-
c'est ci dessous:
/* Ajouter les clés, les contraintes et les index restant pour la table T_WORD. */ create unique index T_WORD_uniqueness_IDX on T_WORD ( vcString, siIdPos, siIdLang) alter table T_SEG_WORD add constraint T_WORD_FK1 foreign key ( nuIdWord) references T_WORD ( nuIdWord); /* Ajouter des contraintes de clé étrangère à la table T_WORD. */ alter table T_WORD add constraint T_LANGUAGE_FK6 foreign key ( siIdLang) references T_LANGUAGE ( siIdLang);
Jean Noël Martin
-
-
-
je ne sais pas quoi dire de plus. Il faut la collation des colonnes de la tables T_Word, je vous ai donné la requête pour répondre à cette demande.
- Marqué comme réponse JeanNoel53 mardi 2 septembre 2014 14:00