ich habe ein recht komplexes Python-Programm (SqlAlchemy/Elixir-Basis), dass auf eine MySQL-DB zugreift. Es ist eine rein interne Anwendung die ich in dieser Form etwa 10 Mal auf verschiedenen Rechnern in verschiedenen Büros installiert habe, unter Windows und Linux. Dabei gab es nie Schwierigkeiten. Die Datenbank wurde dabei mit einem Dump der Referenzinstallation gefüllt. Nun habe ich meinen eigenen Rechner von OpenSuse auf Ubuntu Oneiric (wg. dauernder Querelen mit KDE) umgestellt, und ich kriege es nicht mehr zu laufen.
Folgende Fehlermeldung kommt so oder ähnlich beim Zugriff:
Code: Alles auswählen
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.6.7-py2.7.egg/sqlalchemy/processors.py", line 69, in process
return decoder(value, errors)[0]
File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe4 in position 8: invalid continuation byte
1. Die vorhandenen Daten in der DB sind definitiv korrekt utf-8 kodiert, bei Zugriff darauf erfolg o.g. Fehlermeldung
2. Bei Neueingabe von Daten in die DB sind diese innerhalb der DB doppelt utf-8 kodiert, bei Zugriff darauf erfolgt die Anzeige korrekt (!) ohne Fehlermeldung
3. Lasse ich das Python-Programm auf meinem Rechner laufen, greife aber dabei auf die Referenz-DB auf einem entfernten Rechner zu, kommt ebenfalls die Fehlermeldung, obwohl das selbe Programm auf dem Referenzrecher funktioniert.
4. Ich habe verschiedene Python-Versionen und sqlalchemy-Versionen durchprobiert, immer das gleiche Ergebnis, nämlich die obige Fehlermeldung, wenn auf vorhandene Daten zugegriffen wird
Mein Verdacht: irgendwas passiert mit den Daten zwischen dem Ausgang MySQL und dem Eingang bei SqlAlchemy bzw. umgekehrt, es erfolgt nämlich eine weitere, zusätzliche utf-8 kodierung bzw. dekodierung. Und es könnte was mit Ubuntu Oneiric zu tun haben, denn das selbe Python-Programm läuft ohne ein Byte Änderung auf anderen Rechnern mit Windows und Linux in verschiedenen Versionen problemlos. Mein Ubuntu ist auch voll auf UTF-8 eingestellt, soweit ich das sehen kann.
Kann mir jemand erklären, wass genau passiert zwischen der Datenausgabe bei MySQL und dem Eingang bei Python? Nimmt MySQLdb evtl. Änderunen vor, oder werden die Daten da einfach nur durchgereicht? Wo könnte die zusätzliche kodierung/dekodierung stattfinden? :K
Danke für die Hilfe
Hase