编辑: 我彻底修改了这个问题以反射(reflect)我对问题的更好理解
用于获取数据库中所有表名的 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 数据库时它采用什么编码?
我在 Linux 上使用 UnixODBC、python 2.6.4、pyodbc 2.1.7
最佳答案
ODBC 规范仅允许两种编码:ASCII 和 UCS-2。 ODBC 驱动程序的工作是将数据库所在的任何内容转换为这两者之一,但我发现大多数 ODBC 驱动程序作者不明白它应该如何工作。
执行查询时,pyodbc 不要求任何编码。它执行查询,然后向驱动程序询问每列的数据类型。如果数据类型是Unicode,它将读取缓冲区并将其视为UCS2。如果数据类型是 ASCII,它将读取缓冲区并将其视为 ASCII。
存储格式应该是无关紧要的。
关于mysql - PYODBC 损坏 utf8 数据(从 MYSQL information_schema DB 读取),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5056739/