Seite 1 von 1

Konvertierung Datenbank von ISO8859-1 nach UTF-8

Verfasst: Do 24. Jan 2019, 14:00
von rainernaue
Wie kann ich eine existierende Datenbank von ISO8859-1 nach UTF-8 konvertieren? geht das mit Bordmitteln oder gibt es dafür ein Tool?

Re: Konvertierung Datenbank von ISO8859-1 nach UTF-8

Verfasst: Do 24. Jan 2019, 15:54
von martin.koeditz
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

Re: Konvertierung Datenbank von ISO8859-1 nach UTF-8

Verfasst: Fr 25. Jan 2019, 10:10
von joerg_b
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

Re: Konvertierung Datenbank von ISO8859-1 nach UTF-8

Verfasst: So 27. Jan 2019, 17:54
von bfuerchau
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!