MS AccessとPython 3.2.5と組み合わせてpyodbcを使用しています。pyodbcでUnicode utf-16/8を混乱させる
ODBCバージョンは今、大きな問題は、私が試してみて、私のテーブルを照会する場合、それはちんぷんかんぷんで値を返すことであるRHEL6システム
にunixODBCの2.2.14は、mdbドライバmsodbcsql-11.0.2270です。
例、SELECT * FROM table
リターン:
('ä¹ã', 'ã¶ã°ã°ã°ãµã°')
今、このそれ自体では大きな問題ではありません、私はPythonの文字列に独自のエンコード方式を使用して、それをコードすることができます。
def _enc16(self, value):
return value.encode('utf-16')[2::]
私は(私はこれはPythonの標準だと思った?)私のodbc.iniから
抜粋を私はUTF-16を使用するODBCドライバを言っているものの:
[mdb]
Description = Microsoft Access
Driver = MDBToolsODBC
Database = /path/to/file.mdb
Servername = localhost
Charset = UTF16
PORT = 5432
これが問題の始まりです。 WHERE句を使ってテーブルをクエリしようとすると、Pythonの文字列とテーブルの内容を比較できない可能性があります。
したがってSELECT * FROM table WHERE id = '1'
は対応するレコードがあるにもかかわらず(文をAccessにコピーしてレコードが見つかりました)、None
を返します。
ここで最善のアプローチは何ですか? 正しいエンコーディングを返すようにODBCを設定します(これは既にしばらくの間これを使っています)、または検索条件をエンコードします( '1'を 'ä¹ã'に変換しますが、どうやって)?
ありがとうございました!