Ich versuche, eine Liste von Tabellennamen aus einer MySQL-Datenbank herauszuholen. Die relevanten Teile des Codes sind wie folgt:
%Vor% Für jeden Tisch wird eine Reihe von Kauderwelschzeichen (Kästchen und Fragezeichen in Rauten) gedruckt. Mit repr(table.table_name)
wird gedruckt:
für die Tabelle namens "APPLICATION".
Wenn Sie jedes 32-Bit-Zeichen als zwei 16-Bit-Zeichen behandeln, erhalten Sie die Zeichenfolge "PALPCITAOI". Durch das Tauschen von Zeichenpaaren (1 und 2, 3 und 4 usw.) wird "APPLICATIO" erzeugt (das "N" fehlt). Vermutlich hat es N und das Nullzeichen getauscht, was zu dem fehlenden N führte (unter der Annahme von nullterminierten Strings).
Wie bekomme ich die Tabellennamen richtig?
Dies läuft unter Python 2.4, PyODBC 2.1 und MySQL 5.0.22.
Das Hinzufügen von CHARSET = UTF8 zur Verbindungszeichenfolge funktionierte und ich habe jetzt die Anwendung in Betrieb genommen. Zum Beispiel:
ändern
cnxn = pyodbc.connect('DSN=localhost')
bis
cnxn = pyodbc.connect('DSN=localhost;CHARSET=UTF8')
Danke Thomas, dass er mich in die richtige Richtung weist. Ein Upgrade auf eine spätere Version von PyODBC funktioniert möglicherweise ebenfalls.
Dies ist ein bekanntes Problem, das in pyodbc 2.1.8 behoben wurde:
Leider ist für Ubuntu LTS-Benutzer die Version verfügbar, die für Precise Pangolin 2.1.7 verfügbar ist, wo dieses Problem sich noch zeigt. Wenn du bei LTS bleiben willst, habe ich pyodbc 3.0.6 zurückportiert - du findest es hier: