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...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja, Probleme mit MySQL sind ganz normal, da das Binding zu Python ein tolles Stück Software ist, die geschrieben wurde, um Python-Programmierer von PostgreSQL zu überzeugen 

My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- jens
- Python-Forum Veteran
- Beiträge: 8502
- 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:
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:
Die Variablen: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)
Code: Alles auswählen
content = u'...h2. \xdcber mich...'
term = u'test'
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...
- jens
- Python-Forum Veteran
- Beiträge: 8502
- 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.