修改 我完全重写了这个问题,以反映我对问题的更好理解
PYODBC + MYSQL命令用于获取数据库中的所有表名
cursor.execute("select table_name from information_schema.tables where
table_schema='mydbname'")
结果是每个字符串中包含每隔一个字符的unicode字符串列表。
information_schema
数据库是utf8,虽然我的表名是纯ascii。从我的数据库读取latin1工作正常。执行set character_set_* = 'utf8'
无济于事。
从C ++ / ODBC测试程序执行相同的查询工作正常。
你知道pyodbc
如何对字符编码起作用吗?使用utf8 DB时,它采用什么编码?
我使用UnixODBC,python 2.6.4,pyodbc 2.1.7
在Linux上工作答案 0 :(得分:2)
ODBC规范只允许两种编码:ASCII和UCS-2。 ODBC驱动程序的工作是将数据库所处的任何内容转换为这两者之一,但我发现大多数ODBC驱动程序作者都不理解它应该如何工作。
执行查询时,pyodbc不会要求任何编码。它执行查询,然后向驱动程序询问每列的数据类型。如果数据类型是Unicode,它将读取缓冲区并将其视为UCS2。如果数据类型是ASCII,它将读取缓冲区并将其视为ASCII。
存储格式应该是无关紧要的。