【发布时间】:2016-07-18 08:35:40
【问题描述】:
我正在结合MS Access和Python 3.2.5使用pyodbc(恐怕我不知道是什么版本)。
ODBC 版本是 unixODBC 2.2.14,RHEL6 系统上的 mdb 驱动程序 msodbcsql-11.0.2270
现在最大的问题是,如果我尝试查询我的表,它会返回乱码。
例如,SELECT * FROM table 返回:
('ä¹ã', 'ã¶ã°ã°ã°ãµã°')
现在这本身不是什么大问题,我可以使用 Python 字符串自己的编码方法对其进行编码。
def _enc16(self, value):
return value.encode('utf-16')[2::]
虽然我告诉 ODBC 驱动程序我想使用 utf-16(我认为这是 python 标准?)
摘自我的 odbc.ini:
[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'返回None,即使有对应的记录(我把语句复制到Access中找到了记录)。
那么这里最好的方法是什么? 配置 ODBC 以便它返回正确的编码(如何?我已经摆弄了一段时间)或编码我的搜索条件(将“1”变成“ä¹ã”,但是如何?)?
感谢您的帮助!
【问题讨论】:
标签: python-3.x ms-access unicode pyodbc unixodbc