0

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

用于获取数据库中所有表名的 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 数据库时它采用什么编码?

我使用 UnixODBC、python 2.6.4、pyodbc 2.1.7 在 Linux 上工作

4

1 回答 1

2

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

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

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

于 2011-03-04T15:06:46.657 回答