PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » Tris naturel des string » 08/01/2010 19:09:12

J'ai déjà un parc installé d'une centaine de serveur fonctionnant sur un autre SGBD avec des bases en UTF8. Le changement d'encodage ou de plateforme est donc délicat.

Où peut-on poster pour faire part de ce genre de problème ?
Y'a t'il un correctif possible à attendre ?

Si rien, j'irai voir vers d'autres SGBD mais Postgres à l'air vraiment bien sur pleins de points.

#2 Re : Général » Tris naturel des string » 08/01/2010 13:45:02

@gleu

Je viens de refaire ton exemple sur ma machine. C'est bien ce que je craignais, ça ne fonctionne pas sur mon installation. Pour info, voici ce que j'obtiens :

Martin:bin martin$ ./createdb b3
Martin:bin martin$ ./psql b3
psql (8.4.1)
Type "help" for help.

b3=# show lc_collate;
lc_collate 
-------------
fr_FR.UTF-8
(1 row)

b3=# create table t1 (contenu text);
CREATE TABLE
b3=# insert into t1 values ('b'), ('a'), ('c'), ('à'), ('E'), ('A'), ('e');
INSERT 0 7
b3=# select * from t1;
contenu
---------
b
a
c
à
E
A
e
(7 rows)

b3=# select * from t1 order by contenu;
contenu
---------
A
E
a
b
c
e
à
(7 rows)



Certes, mon install est une 8.4.1 et pas une 8.4.2 mais je ne crois pas que cela fasse vraiment de différence. En revanche, mon install est faite sur un Mac OS 10.6.2 et quand je passe le "SHOW LC_COLLATE" j'obtiens "1 row" et toi "1 ligne". Y'a t'il une différence de localisation entre nos 2 installations qui aurait un rapport avec mon problème ?

Merci d'avance,

Martin

#3 Re : Général » Tris naturel des string » 08/01/2010 12:04:37

Bonjour,

je suis en train de tester postgres et je n'arrive absolument pas à recréer un comportement facile à obtenir sur MySQL ou Primebase.

J'ai une table "bidule" avec une colonne "libelle" de type char(40) dans une base "salutlesmickeys".
J'aimerai que les ORDER BY sur cette colonne soient insensibles à la casse et aux accents. Or, pour l'instant, ce n'est pas le cas. Mon serveur est en version 8.4.2. Toute l'install est en UTF8 :

salutlesmickeys=# \encoding
UTF8

salutlesmickeys=# SHOW LC_COLLATE;
lc_collate 
-------------
fr_FR.UTF-8
(1 row)

salutlesmickeys=# SHOW LC_CTYPE;
lc_ctype   
-------------
fr_FR.UTF-8
(1 row)


J'aimerai un système qui me permette de typer la colonne pour que je n'ai pas à modifier toutes mes requêtes existantes.
En MySQL, ça marche tout seul... Sur Primebase, qui est le SGBD que j'utilise pour l'instant, j'avais créé une "COLLATING SEQUENCE" qui définissait l'ordre de tri des caractères, puis des domaines de données char() utilisant cet ordre de tri prédéfini :
CREATE DOMAIN petiteString CHAR[10],  ORDER AS COLLATING SEQUENCE maSequenceDeTri;

Ce système permet de n'utiliser que des ORDER BY simples dans les requêtes.

Je n'ai pas trouvé de réponse (ou je ne les ai pas comprises) dans les échanges précédents sur le sujet.

Merci pour votre aide,

Martin

Pied de page des forums

Propulsé par FluxBB