PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Résultats différents pour LIKE et ILIKE malgré une recherche identique... Problème d'accents ?

Technique - général | Résultats différents pour LIKE et ILIKE malgré une recherche identique... Problème d'accents ?

Par aitali le 30/07/2007 - 12:38

Bonjour,

J'aimerais pouvoir effectuer des recherches sur mes champs texte en ignorant les majuscules.
J'utilise donc l'opérateur ILIKE. Ma base de données est encodée en UTF8, et je dispose de la version 8.2.4 sous Linux.

Je constate malheureusement l'incohérence suivante :
- select * from items_customers where name like '%bét%';
- select * from items_customers where name ilike '%bét%';
=> OK, résultats identiques

- select * from items_customers where name like '%bé%';
- select * from items_customers where name ilike '%bé%';
=> KO ! Résultats différents : ilike ne retourne rien

En regardant de plus près, j'ai l'impression que lorsque la chaîne de recherche se termine par un caractère accentué, il y a problème.
Avez-vous déjà rencontré cela ? Comment le contouner ?

Cordialement

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

collate?..

Jean-Paul Argudo/ = 30 Juillet, 2007 - 17:11

Bonjour,

Merci de me retourner la sortie de la requête suivante:


select name, setting from pg_settings where name ~* 'lc';

De la même façon, quelles locales avez-vous d'installées sur le système?

Quel est l'encodage utilisé pour la base de données?

Je pense que c'est un problème de COLLATE. J'ai besoin d'un peu plus d'infos pour vous répondre.

--
Jean-Paul ARGUDO
http://dalibo.com | http://dalibo.org


Un peu plus d'infos

aitali/ = 30 Juillet, 2007 - 17:38

Je ne me suis jamais confronté sérieusement aux locales, je vais essayer de vous donner un maximum d'informations.

Sortie de votre requête :
"lc_collate";"fr_FR"
"lc_ctype";"fr_FR"
"lc_messages";"fr_FR"
"lc_monetary";"fr_FR"
"lc_numeric";"fr_FR"
"lc_time";"fr_FR"

locale -a | grep fr_FR
fr_FR
fr_FR@euro
fr_FR.iso88591
fr_FR.iso885915@euro
fr_FR.utf8

locale
LANG=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=

La base de donnée est encodée en UTF8, et placée sur une Red Hat.

---

Là où je suis très étonné, c'est que je ne rencontre pas ce problème sur mon serveur de test (même données, même version de PG, même encodage). Par contre il est équipé d'Ubuntu, et dispose de moins de locales.

Sortie de votre requête :
"lc_collate";"fr_FR.UTF-8"
"lc_ctype";"fr_FR.UTF-8"
"lc_messages";"fr_FR.UTF-8"
"lc_monetary";"fr_FR.UTF-8"
"lc_numeric";"fr_FR.UTF-8"
"lc_time";"fr_FR.UTF-8"

locale -a | grep fr_FR
fr_FR.utf8

locale
LANG=fr_FR.UTF-8
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=

---

Faudrait-il utiliser "fr_FR.utf8" plutôt que "fr_FR" sur le serveur posant problème ? Est-il possible que ces 2 noms identifient la même locale ?

Merci beaucoup !


A essayer

Jean-Paul Argudo/ = 30 Juillet, 2007 - 18:17

Bonjour,

Oui, c'est à essayer... "fr_FR.UTF-8" plutôt que "fr_FR" et surtout, au niveau système, "fr_FR.UTF-8" au lieu de "en_GB.UTF-8", dans la mesure du possible.

Mais sans garantie :-/

--
Jean-Paul ARGUDO
http://dalibo.com | http://dalibo.org


It works

aitali/ = 31 Juillet, 2007 - 11:04

Bonjour,

Petit retour d'expérience, ça fonctionne ! Et sans avoir modifié l'encodage du système.

On a simplement effectué un initdb en utilisant "fr_FR.UTF-8".
Sortie de votre requête :
name | setting
-------------+------------
lc_collate | fr_FR.utf8
lc_ctype | fr_FR.utf8
lc_messages | fr_FR
lc_monetary | fr_FR
lc_numeric | fr_FR
lc_time | fr_FR
(6 rows)

Bien cordialement :-)


lc_collate | fr_FR.utf8

Jean-Paul Argudo/ = 6 Août, 2007 - 23:29


lc_collate | fr_FR.utf8
lc_ctype | fr_FR.utf8

Voilà... bien la preuve que c'était un soucis de lc_collate. Content de vous avoir aidé à résoudre le pb.

Bien cordialement,

--
Jean-Paul ARGUDO
http://dalibo.com | http://dalibo.org


© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.