Kann es sein, das mit der alten Version von MySQLdb, Probleme mit unicode "normal" sind?
Ich muß auch das alte Backend in django benutzten ("mysql_old")...
EDIT: Ist wohl keine gute Idee mysql_old zu nutzten: http://code.djangoproject.com/wiki/Back ... Ldbversion
django: MySQLdb v1.2.1g2 und unicode Fehler...
- jens
- Moderator
- Beiträge: 8458
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
django: MySQLdb v1.2.1g2 und unicode Fehler...
CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
- jens
- Moderator
- Beiträge: 8458
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hm... Klar MySQLdb hat in der Vergangenheit einigen Mist gebaut zum Thema Encoding... Ich denke das beste ist es eine neue Version zu nutzten... Dennoch hab ich mir das ganze mal näher angesehen.
Ich glaube das Problem ist, das mysql_old zwar einige Anstrengungen unternimmt, die Fehler in alten MySQLdb Versionen auszugleichen, aber dennoch wurde das was übersehen.
Normalerweise soll IMHO das DB backend unicode zurück liefern. Das macht jedenfalls das normale "mysql" backend mit einer aktuellen MySQLdb Version.
Ich hab mal einen Patch geschrieben, damit auch das alte "mysql_old" backend Bytestrings in unicode zurück liefert:
http://paste.pocoo.org/show/4100/
Lokal bei mir funktioniert es. Auf dem Web-Server mit einem kleinen Test-Skript geht's auch.
Leider sind aber auch mit diesem Patch meine unicode Fehler nicht weg
Nun weiß ich gerade nicht, wo das Problem liegt, aber ich denke nicht, das es noch am DB Adapter liegt...
Du kannst es dir ja mal ansehen! Führe einfach mal eine Suche auf http://www.jensdiemer.de/_command/1/search/do_search/ aus. z.B. nach "test"...
Das Problem ist hier:
Die Variablen:
Wobei u'\xdcber' auch richtig ist. Denn "\xdc" ist ja ein "Ü".
Ich frage mich warum bei content.count(term) denn überhaupt ein unicode Teil in einem String gewandelt werden soll. Lokal funktioniert das wunderbar.
Jemand einen Tipp???
EDIT: Ich sehe gerade zum mysql_old Problem gibt es auch ein Ticket: http://code.djangoproject.com/ticket/4741
Dort hab ich mal meinen Patch dran gepackt...
Ich glaube das Problem ist, das mysql_old zwar einige Anstrengungen unternimmt, die Fehler in alten MySQLdb Versionen auszugleichen, aber dennoch wurde das was übersehen.
Normalerweise soll IMHO das DB backend unicode zurück liefern. Das macht jedenfalls das normale "mysql" backend mit einer aktuellen MySQLdb Version.
Ich hab mal einen Patch geschrieben, damit auch das alte "mysql_old" backend Bytestrings in unicode zurück liefert:
http://paste.pocoo.org/show/4100/
Lokal bei mir funktioniert es. Auf dem Web-Server mit einem kleinen Test-Skript geht's auch.
Leider sind aber auch mit diesem Patch meine unicode Fehler nicht weg

Nun weiß ich gerade nicht, wo das Problem liegt, aber ich denke nicht, das es noch am DB Adapter liegt...
Du kannst es dir ja mal ansehen! Führe einfach mal eine Suche auf http://www.jensdiemer.de/_command/1/search/do_search/ aus. z.B. nach "test"...
Das Problem ist hier:
File "./PyLucid/plugins_internal/search/search.py" in _search
138. score += content.count(term)
UnicodeDecodeError at /_command/1/search/do_search/
'ascii' codec can't decode byte 0xc3 in position 243: ordinal not in range(128)
Die Variablen:
Code: Alles auswählen
content = u'...h2. \xdcber mich...'
term = u'test'
Wobei u'\xdcber' auch richtig ist. Denn "\xdc" ist ja ein "Ü".
Ich frage mich warum bei content.count(term) denn überhaupt ein unicode Teil in einem String gewandelt werden soll. Lokal funktioniert das wunderbar.
Jemand einen Tipp???
EDIT: Ich sehe gerade zum mysql_old Problem gibt es auch ein Ticket: http://code.djangoproject.com/ticket/4741
Dort hab ich mal meinen Patch dran gepackt...
CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
- jens
- Moderator
- Beiträge: 8458
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hab den Fehler gefunden. Und zwar nutzt django's ORM nicht nur fetchone bzw. fetchall sondern auch fetchmany. Das hatte ich mir meinem Patch aber nicht bedacht!
Im ticket ist nun eine neue Version, die bei mir funktioniert: http://code.djangoproject.com/ticket/4741
Somit hab ich nun keine Unicode Fehler mehr, auch mit mysql_old
Etwas komisch ist es allerdings schon, das der Traceback die Strings als Unicode-String angezeigt hat. Die waren nämlich Byte-Strings. Also wurde da was für den Traceback konvertiert.
Im ticket ist nun eine neue Version, die bei mir funktioniert: http://code.djangoproject.com/ticket/4741
Somit hab ich nun keine Unicode Fehler mehr, auch mit mysql_old

Etwas komisch ist es allerdings schon, das der Traceback die Strings als Unicode-String angezeigt hat. Die waren nämlich Byte-Strings. Also wurde da was für den Traceback konvertiert.
CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder