sqlite umlaute

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

sqlite umlaute

Beitragvon J-B » Donnerstag 10. Juli 2008, 12:24

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

Beitragvon BlackJack » Donnerstag 10. Juli 2008, 13:09

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

Beitragvon J-B » Donnerstag 10. Juli 2008, 13:14

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

Beitragvon BlackJack » Donnerstag 10. Juli 2008, 17:30

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

Beitragvon J-B » Freitag 11. Juli 2008, 07:39

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

Beitragvon BlackJack » Freitag 11. Juli 2008, 09:27

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

Beitragvon J-B » Freitag 11. Juli 2008, 10:06

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

Beitragvon BlackJack » Freitag 11. Juli 2008, 10:12

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

Beitragvon J-B » Freitag 11. Juli 2008, 10:38

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

Beitragvon BlackJack » Freitag 11. Juli 2008, 10:49

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

Beitragvon J-B » Freitag 11. Juli 2008, 10:54

Bleibt alles unverändert.
BlackJack

Beitragvon BlackJack » Freitag 11. Juli 2008, 13:37

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder