Kaputte Sonderzeichen in Django
Zur Verwaltung dieser Seite setze ich das Python-Framwork django ein welches ich etwa wöchentlich direkt via SVN aus dem Trunk ziehe. (Wenn du bis jetzt nichts verstanden hast, wird dich der Rest auch nicht interessieren. ![]()
Diese Woche wurde in Django ein schon lange heiß diskutierter Patch zur Steigerung der MySQL-Performance eingespielt welcher bei mir arge Probleme mit den Sonderzeichen verursachte. (siehe Bild) Genau genommen waren die Sonderzeichen weder UTF-8 codiert (so wie sie original in der Datenbank stehen) noch Westeuropäisch.

Die Lösung war simpel, wenn auch nicht einfach zu finden. In die Settings-Datei muss man eine neue Zeile mit speziellen Einstellungen für die Datenbank einfügen, so dass die Daten aus MySQL auch wirklich als UTF-8 angesehen werden.
1 | DATABASE_OPTIONS = dict(charset="utf8") |
Das reichte bei mir schon aus. Das Problem tritt übrigens nur in speziellen Konstellationen zwischen Django, MySQLDB und bestimmen MySQL-Kollationen auf.
Update
Mittlerweile wurde ein Patch eingespielt der es auch erlaubt, die "alte" MySQL-API zu nutzen. Dazu muss in der settings.py die Zeile so geändert werden:
1 2 | DATABASE_ENGINE = 'mysql' # Zur Nutzung der "alten" Api: DATABASE_ENGINE = 'mysql_old' |
So läuft Django bei mir (Python 2.3, MySQL 5.032) problemlos und die sporadisch auftrende Fehlermeldung "Warning: data truncated" im Admin-Bereich ist auch verschwunden.
Geschrieben am: 19. März 2007 um 11:59 Uhr, Abgelegt in Django & Python
Kommentare zu diesem Artikel (0):
Kommentar schreiben