mysql - PYODBC 损坏 utf8 数据(从 MYSQL information_schema DB 读取)

标签 mysql unicode character-encoding odbc pyodbc

编辑: 我彻底修改了这个问题以反射(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/

相关文章:

python - 如何获取对象的 Unicode 表示

java - 从 Java 字符串中删除字符 e280a8

php - 选择 SQL 上方和下方的行

java - Android、Foursquare 和 —特点

java - 如何在 Java 中将 UTF-8 转换为 unicode?

java - Spring MVC UTF-8 编码

java - 转义双引号无法正常工作

php - Select 标签无法收集 HTML 中的所有值

PHP搜索功能显示null

mysql - 如何将Mysql日期时间格式 "2015-10-10 10:30:59.108000"转换为用户可读格式,如 "Oct. 10, 2015, 2:31 p.m"