sqlite umlaute

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
J-B
User
Beiträge: 6
Registriert: Donnerstag 10. Juli 2008, 12:18

Hallo zusammen,

bin neu und weiß nicht ob ich mich im richtigen Bereich befinde.

Ich bin absolut kein Programmierer, sondern ein Administrator.

Ich muss unsere trac installation auf eine neue Version upgraden. Ansicht kein Problem, nur die Datenbank setzt die umlaute nicht mehr richtig.

Wenn ich versuche die Datenbank via recode
recode Latin1..UTF-8 trac.db
zu dekodieren, dann ist die Datenbank korrupt und nicht mehr lesbar.

Ich bekomme die Datenbank auch nicht mehr in sqlite3 Format konvertiert.
Unable to open database "trac2.db": file is encrypted or is not a database
Jemand eine Idee wie ich eine Sqlite2 datenbank die Umlaute richtig setzen kann?

Danke
BlackJack

Wie kommst Du drauf, das die Daten ausgerechnet in der Datenbank falsch sein müssen? Ich würde ja eher auf eine Einstellung an anderer Stelle tippen.
J-B
User
Beiträge: 6
Registriert: Donnerstag 10. Juli 2008, 12:18

BlackJack hat geschrieben:Wie kommst Du drauf, das die Daten ausgerechnet in der Datenbank falsch sein müssen? Ich würde ja eher auf eine Einstellung an anderer Stelle tippen.
http://trac.edgewall.org/ticket/7423#comment:1

Weil es ein bekannter Fehler von trac ist.
BlackJack

Okay, dann würde ich sagen Du hast in dem Ticket das mit dem *dump* überlesen. Du hast versucht die Datenbank direkt mit ``recode`` zu bearbeiten, dass ist aber eine Binärdatei bei der mit Sicherheit die Dateistruktur Schaden nimmt, wenn Du sie einfach so als Text behandelst. Und bei dem Verweis auf ``recode`` steht auch "maybe". Vielleicht geht's auch nur per Hand zu reparieren. Was bei einer grossen Datei natürlich unangenehm wäre.
J-B
User
Beiträge: 6
Registriert: Donnerstag 10. Juli 2008, 12:18

Das mit Dump hab ich schon gelesen, nur verstehe ich nicht wie ich dies übergeben soll.

Ein
sqlite trac.db .dump | recode Latin1..UTF-8
Scheint nicht so ganz zu funktionieren.

Die Datebank hat immernoch probleme mit Umlauten, siehe
INSERT INTO attachment VALUES('ticket',314,'Entwurf einer Datenschutzerklärung.
rtf',
Hast du vielleicht ne Idee wie man das sonst so macht?

*** Edit

Hab auch ein Dump erzeugt, und diese mit recode laufen lassen. Leider ebenfalls ohne erfolg. Muss ich wohl alles per Hand machen. Bei 100 MB Daten :)
BlackJack

Bei dem ``INSERT`` ist es noch wichtig dazu zu sagen in welcher Kodierung das angezeigt wird. Sonst weiss man ja gar nicht, was da *wirklich* steht.

Das Problem ist wohl, dass nicht alle Zeichen ausserhalb von ASCII in der Datenbank falsch sind, sondern nur solche, die durch so einen "post commit hook" hinein gelangt sind.

Du könntest ein kleines Programm schreiben, dass die Datei zeilenweise durchgeht, versucht sie als UTF-8 zu dekodieren, und wenn das fehlschlägt, die Zeile rekodiert. Ungetestet:

Code: Alles auswählen

import sys

def main():
    for line in sys.stdin:
        try:
            line.decode('utf-8')
        except UnicodeDecodeError:
            line = line.decode('latin1').encode('utf-8')
        sys.stdout.write(line)

if __name__ == '__main__':
    main()
J-B
User
Beiträge: 6
Registriert: Donnerstag 10. Juli 2008, 12:18

Sorry das ich so dumm frage, aber wie nutzt man das Script?

Ich habe das Script in convert.py gespeichert und wie folgt ausgeführt:
python convert.py tracdb.db
Tut sich leider nichts :(
BlackJack

Das benutzt man auch mit dem "Dump" und nicht mit der Datenbank und die Daten kommen bei stdin rein und stdout raus. Also zum Beispiel:

Code: Alles auswählen

sqlite3 trac.db .dump | python convert.py > ergebnis.dump
J-B
User
Beiträge: 6
Registriert: Donnerstag 10. Juli 2008, 12:18

Schade klappt leider auch nicht.

Wäre es denn möglich die Sonderzeichen einfach zu löschen? Die Daten kann man sich ja dann einfach denken, hauptsache das Trac funktioniert wieder.
BlackJack

Was klappt denn daran nicht?
J-B
User
Beiträge: 6
Registriert: Donnerstag 10. Juli 2008, 12:18

Bleibt alles unverändert.
BlackJack

Hast Du mal ein ``diff`` zwischen den beiden Dumps gemacht? Wenn die wirklich gleich sind, dann liegt's wohl nicht an der Datenbank, sondern an irgend einer anderen Einstellung.
Antworten