PYODBC破坏utf8数据(从MYSQL information_schema DB读取)

时间:2011-02-20 11:30:09

标签: mysql unicode character-encoding odbc pyodbc

修改 我完全重写了这个问题,以反映我对问题的更好理解

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上工作

1 个答案:

答案 0 :(得分:2)

ODBC规范只允许两种编码:ASCII和UCS-2。 ODBC驱动程序的工作是将数据库所处的任何内容转换为这两者之一,但我发现大多数ODBC驱动程序作者都不理解它应该如何工作。

执行查询时,pyodbc不会要求任何编码。它执行查询,然后向驱动程序询问每列的数据类型。如果数据类型是Unicode,它将读取缓冲区并将其视为UCS2。如果数据类型是ASCII,它将读取缓冲区并将其视为ASCII。

存储格式应该是无关紧要的。