Vous n'êtes pas identifié(e).
Bonjour à tous,
Je suis présentement en train de convertir des bases de données de MS SQL 2008 vers PostgreSQL, et je rencontre un problème en ce qui concerne l'importation des caractères spéciaux auquel j'ai de la difficulté à résoudre.
MS SQL Server 2008
Collation : SQL_Latin1_General_CP0850_CI_AI
PostgreSQL 9.0.3
Lorsque je créé ma base de données vide pour ensuite transférer mes données, elle a les paramètres suivants :
CREATE DATABASE maBase
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'English_Canada.1252'
LC_CTYPE = 'English_Canada.1252'
CONNECTION LIMIT = -1;
J'ai également testé avec la configuration ci-dessous:
CREATE DATABASE maBase
WITH OWNER = postgres
ENCODING = 'WIN1252'
TABLESPACE = pg_default
LC_COLLATE = 'English_Canada.1252'
LC_CTYPE = 'English_Canada.1252'
CONNECTION LIMIT = -1;
Dans la liste de collations, je n'ai 'English_Canada.1252', 'C' et 'POSIX'
Dans tous les cas, j'ai des résultats comme celui-ci dans ma base PostgreSQL :
- "GÚrer les conflits en milieu de travail"
- "ActivitÚs de consolidation d'Úquipe"
- etc.
Avez-vous une idée de solution pour ce problème?
Merci beaucoup!
Charles Morin
PostgreSQL 9.0.3 sur Windows 2008 Server Standard (x64)
Hors ligne
Quel est la valeur du client_encoding quand vous lisez le contenu de la base ? quel client utilisez-vous ?
Guillaume.
Hors ligne
Bonjour gleu,
la commande SHOW client_encoding; retourne UNICODE.
J'utilse pgAdminIII version 1.12.2
Merci!
Charles Morin
PostgreSQL 9.0.3 sur Windows 2008 Server Standard (x64)
Hors ligne
J'ai remarqué que dans postgresql.conf, ma configuration de base pour les lc_ est la suivante :
# These settings are initialized by initdb, but they can be changed.
lc_messages = 'English_Canada.1252' # locale for system error message
# strings
lc_monetary = 'English_Canada.1252' # locale for monetary formatting
lc_numeric = 'English_Canada.1252' # locale for number formatting
lc_time = 'English_Canada.1252' # locale for time formatting
J'aimerais la changer pour en_CA.UTF-8 mais je n'y arrive pas. Lorsque je tente de redémarrer le service, ce dernier échoue et ne démarre pas.
Merci!
Charles Morin
PostgreSQL 9.0.3 sur Windows 2008 Server Standard (x64)
Hors ligne
Peu importe les paramètres lc_*. lc_messages ne sert qu'à changer la langue des messages du serveur et les autres ne servent qu'au moment de l'utilisation de la fonction to_char.
pgAdmin renvoie toutes les données au format UTF-8. Le client_encoding indique aussi de l'UTF-8. Les messages que vous montrez ("GÚrer les conflits en milieu de travail"), ils sont affichés ainsi par pgAdmin ou par la console ?
Guillaume.
Hors ligne
Affiché par pgAdmin quand je vais dans "View Data".
Lorsque je vais en console, même le contenu de \? est incorrect.
Exemple :
exÚcute SQL COPY avec le flux de donnÚes dirigÚ vers l'h¶te client
Charles Morin
PostgreSQL 9.0.3 sur Windows 2008 Server Standard (x64)
Hors ligne
Parce que la console Windows affiche en win1252 et que la traduction est en UTF-8.
Concernant votre problème, il est très probable qu'il est survenu au moment de l'import. Quel outil avez-vous utilisé ?
Guillaume.
Hors ligne
ESF Database Migration Toolkit
J'ai pourtant sélectionné UTF-8, j'ai également essayé SQL_ASCII et WIN.1252
Toujours la même chose.
Dernière modification par charleydc5 (14/07/2011 20:12:44)
Charles Morin
PostgreSQL 9.0.3 sur Windows 2008 Server Standard (x64)
Hors ligne
Il faudrait creuser auprès de l'éditeur de cet outil pour savoir si des problèmes de ce type sont déjà survenus.
Très clairement, avec PostgreSQL, voici ce qui se passe sur l'encodage : quand vous donnez une chaîne à PostgreSQL dans une requête, si le client_encoding et le serveur_encoding sont différents, PostgreSQL traduit l'encodage client en encodage serveur. Si cette traduction n'est pas possible, la requête tombe en erreur. Si par contre la conversion réussit, elle est stockée en base suivant le server_encoding. Un utilisateur qui vient récupérer cette ligne va automatiquement déclenché le processus inverse : conversion du server_encoding vers le client_encoding. Il faut donc que l'application qui a exécuté la requête soit compatible avec ce client_encoding (par exemple, si j'essaie d'afficher une chaine en WIN1252 sur un terminal Linux paramétré en UTF-8, la chaîne sera forcément mal affichée). Voilà en gros comment ça se passe.
Guillaume.
Hors ligne
Donc, si j'ai bien compris, il faudrait que mon pgAdmin (client_encoding) et que mon server_encoding (PostgreSQL) aient le même encoding pour éviter tout problème de ce genre.
Présentement, j'ai UNICODE comme client_encoding et UTF8 comme server_encoding.
J'ai écris au fabricant du logiciel. Je vous tiens au courant des développements.
Charles Morin
PostgreSQL 9.0.3 sur Windows 2008 Server Standard (x64)
Hors ligne
Une chose que j'aimerais savoir est comment faire pour ajouter des collations et character set supplémentaires à PostgreSQL?
Présentement, j'ai seulement C, English_Canada.1252 et POSIX.
J'aimerais pourvoir y retrouver en_CA.UTF-8
Merci beaucoup
Charles Morin
PostgreSQL 9.0.3 sur Windows 2008 Server Standard (x64)
Hors ligne
Cela se passe au niveau du système d'exploitation. Il faut les ajouter au système (ici Windows) pour que PostgreSQL puisse les utiliser. Par contre, je n'ai aucune idée de comment faire sous Windows.
Guillaume.
Hors ligne
Je n'ai pas de windows sous la main mais cela doit se trouver quelque part vers "panneau de config/Région et Langue"
Cédric Villemain +33 (0)6 20 30 22 52
http://2ndQuadrant.fr/
PostgreSQL: Support 24x7 - Développement, Expertise et Formation
Hors ligne
Exactement. Je suis allé voir dans mes configurations Windows XP et j'avais Français (Belgique) alors que je suis au Canada. Ceci devait être une erreur.
Par contre, après un redémarrage de mon laptop pour être en Français (Canada), le problème est toujours le même.
J'ai donc décidé d'installer l'outil de conversion sur le serveur Windows 2008 Server de PostgreSQL qui lui est en English (Canada). Devinez-quoi, les accents et les autres caractères spéciaux ont suivi parfaitement.
Je n'y comprend plus rien... Pourtant, dans ma tête, l'anglais n'aime pas les accents, alors que le Français en utilise très fréquemment.
Quelqu'un a une idée ou des hypothèses?
Merci
Charles Morin
PostgreSQL 9.0.3 sur Windows 2008 Server Standard (x64)
Hors ligne