Kodierung nachträglich ändern

Datenbank Migration (z. B. von MySQL auf PostgreSQL)
Antworten
Joerg01
Neuer Benutzer
Beiträge: 7
Registriert: Mo 13. Jan 2020, 17:36

Kodierung nachträglich ändern

Beitrag von Joerg01 »

Hallo,

ich habe eine Datenbank vom alten System in ein neues mittels dem Befehl:

Code: Alles auswählen

pg_dumpall

und zurück mit

Code: Alles auswählen

sql < dump
Nun habe ich erst nach einigen Tagen bemerkt das es mit den Umlauten nicht mehr passt.
Hier die Kodierung vom psql des alten Systems:

Code: Alles auswählen

postgres=# \l
    Liste der Datenbanken
    Name | Eigentümer | Kodierung | Sortierfolge | Zeichentyp |
    -----------±-----------±----------±-------------±-----------±------------------------
    dbwichtig | dbuser | LATIN1 | de_DE | de_DE |
    postgre s | postgres | LATIN1 | de_DE | de_DE |
    template0 | postgres | LATIN1 | de_DE | de_DE |
und psql des neuen Systems:

Code: Alles auswählen

 postgres-# \l
    Liste der Datenbanken
    Name | Eigentümer | Kodierung | Sortierfolge | Zeichentyp |
    -----------±-----------±----------±-------------±------------±------------------------
    dbwichtig | dbuser | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 |
    postgres | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 |
    template 0 | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 |
Soweit ich mich eingelesen habe sind die Zeichen in der neuen Datenbank nun Latin1 und Psql denkt sie sind UTF8.
Wenn ich diese jetzt Konvertiere mach ich vermutlich mehr kaputt oder?
Kann man die Kodierung auch einfach Umstellen ohne zu Konvertieren?
Hätte der Dump das nicht richtig einstellen müssen? :(

Grüße Jörg

akretschmer
Erfahrener Benutzer
Beiträge: 7733
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Kodierung nachträglich ändern

Beitrag von akretschmer »

Nein, vermutlich ist alles in Ordnung.

Du hast instinktiv die Methode gefunden, die Kodierung einer DB zu ändern: auslesen und in der gewünschen Kodierung einlesen.

Hast Du denn sichtbare Probleme? Ich vermute: nein.
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Joerg01
Neuer Benutzer
Beiträge: 7
Registriert: Mo 13. Jan 2020, 17:36

Re: Kodierung nachträglich ändern

Beitrag von Joerg01 »

Hallo ,
doch ich habe Probleme die Datenbank gehört zu einer Cloud und alle Dateien bzw. Ordner mit Umlauten können nicht geöffnet werden da sie im Dateisystem nicht gefunden werden. Im Dateisystem werden alle Umlaute richtig dargestellt. Im Browser sehe ich es wie unten im Beispiel.

Beispiel einer Datei die schon auf dem alten System erstellt wurde:
neu => Test über dä ömlaut.pdf
normal=> Test über dä ömlaut.pdf

Joerg01
Neuer Benutzer
Beiträge: 7
Registriert: Mo 13. Jan 2020, 17:36

Re: Kodierung nachträglich ändern

Beitrag von Joerg01 »

habe gerade nochmal die Dump´s angeschaut
die alten enthielten den Befehl :
SET client_encoding = 'LATIN1';

die sicherung der neuen "Fehlerhaften" Datenbank ist:
SET client_encoding = 'UTF8';

daher vermute ich das die Daten in Latin1 sind und die Datenbank denkt es ist UTF8

akretschmer
Erfahrener Benutzer
Beiträge: 7733
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Kodierung nachträglich ändern

Beitrag von akretschmer »

*vemutlich* reicht es, daß in Deiner Applikation (Nextcloud?) auf den neuen Wert einzustellen.
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Joerg01
Neuer Benutzer
Beiträge: 7
Registriert: Mo 13. Jan 2020, 17:36

Re: Kodierung nachträglich ändern

Beitrag von Joerg01 »

ich kann dort nur bei php, und im header die Kodierung einstellen steht immer auf UTF-8
und das war auch früher schon so...

Man kann alle Dateien aus dem Dateisystem neu einlesen dann würde es vermutlich passen,
jedoch habe ich auch einen Passwortmanager der Verschlüsselt die Passwörter speichert und da sind einige Korupt geworden.
Die Passwörter kann ich mit dem einlesen nicht Retten.

Ist es normal so das der Dump beim einspielen automatisch konvertiert wird wenn eine andere Kodierung vorliegt?

Joerg01
Neuer Benutzer
Beiträge: 7
Registriert: Mo 13. Jan 2020, 17:36

Re: Kodierung nachträglich ändern

Beitrag von Joerg01 »

Nach langen suchen denke ich über folgende möglichkeit nach.

Ich fand ein skript für mysql aber nicht für psql.
https://www.all4hardware4u.de/programmi ... hen-utf-8/

Daher würde ich jetzt einen neuen pg_dumpall erstellen und die Zeichen mit Notepad suchen und ersetzen austauschen.
Danach den dump wieder einspielen.
Die Passwörter kann ich vermutlich nicht retten da die daten verschlüsselt sein sollten.

Kann ich den dumpall einfach drüberbügeln oder muss ich die vorherige Datenbank löschen?

Ist dies überhaupt zu Empfehlen?

pferdefreund
Neuer Benutzer
Beiträge: 2
Registriert: Di 21. Jan 2020, 13:59

Re: Kodierung nachträglich ändern

Beitrag von pferdefreund »

Ich würde die Datei des alten dump_all einfach in UTF-8 kodieren. Hast du zufällig jemanden mit Linux - da gibt es für sowas iconv.
Dann ganz normal mit psql einspielen in die neue DB. die darf bei einem Laden aus dump_all nicht vorhanden sein, wird ja da automatisch angelegt. Die Definitionen sind ja in der dump_all-Datei enthalten.

Antworten