在 Mac - pyodbc 不从 mysql 获取长列

On Mac - pyodbc doesn't fetch long columns from mysql

我在 mysql 之上有以下 python 代码 运行:

sql = "select col1 from table1"  
conn = pyodbc.connect(CONNECTION_STRING)  
cursor = conn.cursor()  
cursor.execute(sql)  
result = cursor.fetchall()

col1 的类型是 LONGTEXT。如果一行 col1 长于 255 个字符,它不会被返回并且 result 出来是空的,如果它更短就没有问题,那就是以下对 "problematic" 行的查询将按预期工作:

sql = "select substr(col1,1,255) from table1"

我的 OSX 版本是 (Yosemite) 10.10.1,我使用 mysql 5.3 UTF-8 驱动程序 - libmyodbc5w.so。如果使用 ANSI 驱动程序 - libmyodbc5a.so - 将按预期获取行。

尝试使用上述方法 - 使用 libmyodbc5a.so 而不是 libmyodbc5w.so,但后来我通过 pyodbc 遇到了类似的 Vertica 连接问题,所以我发现了以下问题: https://code.google.com/p/pyodbc/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary&groupby=&sort=&id=78

所以解决步骤是:

  • 下载 pyodbc 源
  • 编辑 src/getdata.cpp - 您会注意到以下块:

(第 270 行左右)

case SQL_WCHAR:
case SQL_WVCHAR:
case SQL_WLONGVARCHAR:
    nTargetType = SQL_C_WCHAR;
break;
  • 将SQL_C_WCHAR替换为SQL_C_CHAR
  • 重建 pyodbc - 现在应该解决问题