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

Format ENCODING UTF8

Technique - général | Format ENCODING UTF8

Par ugo.brunel le 22/02/2006 - 15:53

Bonjour,

Je suis en train de tester la migration d'une base de données Oracle vers PostgreSQL avec ora2pg (PERL).

J'ai des problèmes aux chargements dans PostgreSQL pour certains enregistrements.
J’ai créé la base dans PostgreSQL avec le format encoding UTF8 mais je n’arrive pas à charger des lignes par COPY qui ont des caractères accentués « àéè… ».

Le message que je reçois est :
“ERROR: invalid UTF-8 byte sequence detected near byte 0xe0”

J’ai testé en créant une table simple :
Create table toto (i numeric,j varchar(100)) ;
insert into toto ("i","j") values (1,'Je suis Ă  la plage');
ERROR: invalid UTF-8 byte sequence detected near byte 0xe0

Par contre, si je me mets latin1 ça fonctionne correctement :
Set client_encoding=’latin1’;
insert into toto ("i","j") values (1,'Je suis Ă  la plage');
INSERT 0 1

J’ai reproduis le phénomène sur Windows et Linux.

Je ne comprends pas le problème car UTF8 permet le codage sur 8 bits donc il devrait prendre en compte ce type de caractère ?
Faut-il que mes bases soient en encoding latin1 ou que je force en latin1 avant insertion ?

Merci par avance pour votre aide.

Ugo BRUNEL

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.

Bonjour Il s'agit bien d'u

Christophe Chauvet/ = 22 FĂ©vrier, 2006 - 16:11

Bonjour

Il s'agit bien d'un problème d'encodage, il se trouve que votre client et la base de données utilisés, n'ont pas le même encodage.

il faut preciser l'encodage coté client, car en UTF8 les lettres avec accent sont encodés sur 2 octets, ce qui n'est pas le cas en latin1 ou latin9. c'est pour cela qu'une erreur apparaît lors de l'insertion.

une méthode a essayé serait de convertir le fichier texte en UTF8 avant de l'insérer (à tester).

Cordialement.

Christophe Chauvet
http://kryskool.org/


Merci pour l'info (réponse s

ugo.brunel/ = 22 FĂ©vrier, 2006 - 16:20

Merci pour l'info (réponse super rapide)

J'ai le problème si je me connecte à mon serveur linux à distance (via putty) mais je ne l'ai pas si je me connecte directement sur le serveur en local.

Sinon pour convertir le fichier en UTF8 comment je procède.

Encore merci.

Cordialement.
Ugo BRUNEL


plus simple, avant les insert

sparky/ = 22 FĂ©vrier, 2006 - 17:14

plus simple, avant les insert faire set encoding=latin1 puisque c'est le codage utilisé dans le script :-)


Pour convertir en UTF8 sous W

Christophe Chauvet/ = 22 FĂ©vrier, 2006 - 18:51

Pour convertir en UTF8 sous Windows vous pouvez par exemple utiliser Notepad++ (logiciel libre) aller dans le menu format -> Encoder en UTF8

sinon effecivement lplus simple est d'inséré un set client_encoding = latin 1 juste avant l'appel à la fonction COPY.

Cordialement.

Christophe Chauvet
http://kryskool.org/


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