web-dev-qa-db-fra.com

PostgreSQL et UTF8 à la conversion latin1?

Nous avons une base de données PostgreSQL où les données sont en latin1. Apparemment, une personne chargée de certaines données codées UTF8 depuis lors, lorsque je sélectionne des données de certaines des colonnes, je reçois des choses comme:

SELECT symptoms from client
- -
"huvudvärke"
- -

où "ä" devrait être "Ä". Je pourrais le supporter avec remplacer, à savoir:

UPDATE client SET symptoms=replace(symptoms, 'ä', 'ä');

J'ai essayé quelques solutions que j'ai trouvées, comme en utilisant convert et convert_to Mais cela laisse les données ressemblant à "huvudv\303\244rke".

Y a-t-il une solution existante à mon problème?

ÉDITER:

SELECT symptoms, symptoms::bytea from client
- -
"huvudvärke";"huvudv\303\203\302\244rke" 
- -

Après la mise à jour ci-dessus, interrogez des symptômes :: Sorties BYTEA:

SELECT symptoms, symptoms::bytea from client
- -
"huvudvärke";"huvudv\303\244rke" 
- -

EDIT2:

select version();
"PostgreSQL 9.2.9, compiled by Visual C++ build 1600, 64-bit"

show client_encoding; --I'm using pgAdmin III 1.18.1
"UNICODE"

show server_encoding;
"UTF8"

SELECT symptoms, convert(convert_to(symptoms, 'utf-8'), 'latin-1', 'utf-8')::text from client;
"huvudvärke","huvudv\303\203\302\203\303\202\302\244rke"
4
James Brown

Convertir la chaîne en Dest_encoding. Le codage d'origine est spécifié par src_encoding. La chaîne doit être valide dans ce codage. Les conversions peuvent être définies en créant une conversion. Il existe également des conversions prédéfinies. Voir le tableau 9-7 pour les conversions disponibles.

Voir Autres fonctions de chaîne

convert(string bytea, src_encoding name, dest_encoding name)
convert_to(text_in_database,'LATIN1')
0
Heisenberg