64 ビットの Ubuntu 11.0、64 ビットの python 2.7.2、および pyodbc 3.0.3 を実行しています。
ネットワークWindowsマシンにある古いアクセスデータベース(97だと思いますが、100%確実ではありません)からデータを取得しようとしています。
次の選択を実行すると、結果が表示されます。
select id, firstname, lastname from customer where id < 5
(id は「Counter」タイプで、firstname と lastname は varchar です)
Python から、Ubuntu の pyodbc (ここで何か問題があります) :
(16973874, 'Candance\x00\x00', 'Mattingly\x00\x00')
(16973875, 'Anthony & Ana Marie\x00\x00', 'Cushing\x00&')
(16973876, 'Sharon\x00\x00', 'Brown\x00\x00')
Ubuntuのisqlから(良い結果)(わずかに再フォーマット):
| 2 | Candance | Mattingly |
| 3 | Anthony & Ana Marie | Cushing |
| 4 | Sharon | Brown
Windows 7、64ビットのpython、pyodbcから(良い結果):
(2, u'Candance', u'Mattingly')
(3, u'Anthony & Ana Marie', u'Cushing')
(4, u'Sharon', u'Brown')
私の odbc.ini は次のようになります。
[MSACCESS]
Description = Old MS Access Database
Driver = /usr/lib/libmdbodbc.so.0
Database = [path to mounted drive].mdb
基本的に、pyodbc は Ubuntu で間違った結果を返す (または間違って解釈する) ことになります。これを修正するための役立つ提案をいただければ幸いです。
- 「client charset = XXX」を追加するさまざまなバリエーションを試しましたが、効果がないようです。
- Ubuntu の pyodbc から返される「id」列は 16973872 が高すぎ、varchar 列は半ランダムなバイトで終わっているように見えることに注意してください (多くは \x00 ではありません)。