Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/03/2005, 17h37   #1
Invité de passage
 
Inscription : mars 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 10
Points : 4
Points : 4
Par défaut Importance des accents pour une recherche dans postgre

Bonjour à tous,

Dans un cadre professionel nous faisons développer par une société un produit utilisant PostGreSQL pour le sockage des données.
Dans la version actuellement en test nous nous sommes rendu compte que le moteur de recherche (requetes SQL) était sensible aux accents.
Par exemple si nous cherchons "reunion" nous n'aurons pas "réunion" dans les résultats.
Certes il n'y a qu'à écrire correctement la recherche mais pour diverses raisons cela nous pose un gros problème.
La réponse du développeur est que PostGre tient compte des accents et qu'ils n'y a pas de solution simple à mettre en oeuvre pour palier à ce problème.

A titre personnel j'utilise beaucoup mySQL qui ne pose pas ce problème et je suis donc un peu surpris... Je précise bien que je ne connais strictement rien à PostGre. J'ai fait quelques recherches et n'ai pas trouvé la réponse à ma question.

Merci beaucoup pour vos éclaicissement !

à+
glouf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2005, 23h55   #2
Membre éclairé
 
Inscription : janvier 2005
Messages : 336
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2005
Messages : 336
Points : 353
Points : 353
Bonjour

la recherche de mot avec accent ou pas se fait de la façon suivante
Code :
SELECT * FROM ma_table WHERE to_ascii(mon_champ,'LATIN1') LIKE '%reunion%';
LATIN1 est le type de codage, cela peut être également LATIN9, par contre à vérifier si cela fonctionne correctement avec un base en UNICODE

Code :
La réponse du développeur est que PostGre tient compte des accents et qu'ils n'y a pas de solution simple à mettre en oeuvre pour palier à ce problème.
encore un développeur qui repond sans même avoir au moins poser la question a d'autre développeur, c'est typiquement français

KrysKool
kryskool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2005, 00h50   #3
Membre à l'essai
 
Inscription : janvier 2005
Messages : 38
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : janvier 2005
Messages : 38
Points : 24
Points : 24
Envoyer un message via MSN à moog
Bonjour

En lisant ce post je réalise que je vais avoir le même problème pour un moteur de recherche!
Ma base est en unicode et j'ai testé la requete.

Malheureseument cela ne fonctionne pas!
Non seulement il ne trouve pas '%reunion%', mais il ne trouve pas non plus '%réunion%'
moog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2005, 09h44   #4
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
Une méthode simple serait de créer une autre colonne qui serait en fait codifié.
Exemple
champ texteorigine : réunion
champ codifié : reunion

j'avais fait une petite procedure qui me simplifiait le texte, cela enleve les accents mais aussi les lettres en doublon (ou plus)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
CREATE OR REPLACE FUNCTION minimizetext(text)
  RETURNS text AS
$BODY$
DECLARE
 chaine text;
 desti text;
 last char(1);
 current char(1);
 i integer;
BEGIN
 chaine:=translate($1,'àéèêëîïù','aeeeeiiu');
 last:=' ';
 desti:='';
 FOR i IN 1..length(chaine) LOOP
  current:=substring(chaine,i,1);
  IF current<>last THEN
   last:=current;
   desti:=desti||current;
  END IF;
 END LOOP;
 RETURN desti;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

utilisation
Code :
1
2
3
4
 
SELECT minimizetext('reunion'); --> reunion
SELECT minimizetext('réunion'); --> reunion
SELECT minimizetext('réuuuuunion'); --> reunion
La procédure ne prenait pas en compte les majuscules et minuscules, c'etait gerer au niveau appli.
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2005, 13h25   #5
Membre à l'essai
 
Inscription : janvier 2005
Messages : 38
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : janvier 2005
Messages : 38
Points : 24
Points : 24
Envoyer un message via MSN à moog
Oui c'est une solution a envisagé qui a l'avantage d'être simple à mettre en place

comme quoi :
Citation:
La réponse du développeur est que PostGre tient compte des accents et qu'ils n'y a pas de solution simple à mettre en oeuvre pour palier à ce problème.
n'etait pas tout a fait juste

Merci pour cette idée

Moog
moog est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h24.


 
 
 
 
Partenaires

Hébergement Web