Konvertierung Datenbank von ISO8859-1 nach UTF-8

Forum für neue Firebird-Anwender.

Moderator: thorben.braun

Antworten
rainernaue
Beiträge: 1
Registriert: Do 24. Jan 2019, 13:39

Wie kann ich eine existierende Datenbank von ISO8859-1 nach UTF-8 konvertieren? geht das mit Bordmitteln oder gibt es dafür ein Tool?
Benutzeravatar
martin.koeditz
Beiträge: 443
Registriert: Sa 31. Mär 2018, 14:35

Hallo Rainer,

die Konvertierung mit Boardmitteln ist m.E. nicht möglich. Es gibt jedoch das Tool fbclone. Damit können die Daten von der alten Quelle in eine frische UTF-8-DB "gepumpt" werden. Das Tool übernimmt die Konvertierung der Daten.

Siehe auch https://github.com/zedalaye/fbclone/wik ... -Databases

Alternativ kann man auch vollwertige DB-Tools wie IBExpert, etc. nehmen.

1. Alte Datenbank in ein Skript exportieren (Metadaten und Daten)
2. Die Definitionen der Zeichensätze nicht exportieren bzw. per Suchen/Ersetzen löschen.
3. Neue UTF-8-DB erstellen
4. Das Skript mit dem alten Zeichensatz (oder bei NONE trotzdem ISO8859_1) in der UTF-8-DB
ausführen.
5. Auf Fehlber prüfen. Evtl. gibt es Probleme mit Zeichenlängen. Diese müssen im Skript nochmals angepasst werden.

Gruß
Martin
Martin Köditz
it & synergy GmbH
Benutzeravatar
joerg_b
Beiträge: 17
Registriert: Mi 26. Sep 2018, 19:15

mach mal ein Backup mit gbak der Datenbank

und dann versuchs mal mit
gbak -R -V -FIX_FSS_D UTF-8 -FIX_FSS_M UTF 8 <Backup-Datei> <Neie Datenbank-datei> -user <username> -passw <Passwort>

So übernehme ich zZt meine alten Datenbanken ohne Codepage nach ISO8859-1
Ist nur ein Versuch, ich habs nicht probiert
Schöne Grüße aus dem Südharz
Jörg
bfuerchau
Beiträge: 485
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Damit wird nicht die Datenbank auf eine andere CHARSET gebracht sondern die Metadaten, die mit FSS, der firebirdeigenen Unicode-Lösung, erstellt wurden zu korrigieren und auf UTF8 umzustellen.
Daher der Parameter "-fix".
Beim Erstellen einer Tabelle wird jedes Feld mit dem Default-Charset erstellt und dies ist auch nicht änderbar.

Eine tatsächliche Konvertierung ist nur über eine manuelle Copy-Funktion, Table für Table, möglich.
Dabei müssen dann auch sämtliche Prozeduren, Trigger, Funktionen ebenso berücksichtigt werden und auch Views und Indizes müssen neu erstellt werden.
Beim Erstellen von Indizes kann es u.U. zu Problemen führen, wenn der Index 1/4 der Pagesize übersteigt.
Zu bedenken ist, dass ein 500-Zeichen Feld, varchar(500), in UTF8 2000 Byte belegt und bei 8-K-Pages nicht mehr indizierbar ist!
Antworten