PyODBC gibt falsches UTF-16 aus

8

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:

%Vor%

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.

    
Jonathan 28.03.2012, 16:17
quelle

2 Antworten

5

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.

    
Jonathan 02.04.2012, 20:11
quelle
2

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:

Ссылка

    
Gareth Oakley 04.05.2013 18:26
quelle

Tags und Links