Pyodbc连接Linux端Basis数据库报UTF-8解码错误如何解决
import pyodbc import pandas as pd import numpy as np cnxn = pyodbc.connect('DSN=CompanyDSN') # 同时指定字符类型的读写编码 cnxn.setencoding(encoding='ISO-8859-1', ctype=pyodbc.SQL_CHAR) cnxn.setdecoding(pyodbc.SQL_CHAR, encoding='ISO-8859-1') # 宽字符类型同步设置 cnxn.setencoding(encoding='ISO-8859-1', ctype=pyodbc.SQL_WCHAR) cnxn.setdecoding(pyodbc.SQL_WCHAR, encoding='ISO-8859-1') # 解码报错时可临时开启errors参数跳过非法字符 # cnxn.setdecoding(pyodbc.SQL_CHAR, encoding='ISO-8859-1', errors='replace') cursor = cnxn.cursor() cursor.execute("SELECT 1 FROM Music") for row in cursor.fetchall(): print(row) # 直接使用配置好的连接读取数据到DataFrame df = pd.read_sql("SELECT * FROM Music", cnxn)
排查补充思路
- 检查Linux环境下ODBC配置文件
/etc/odbc.ini或用户目录下的.odbc.ini,在对应CompanyDSN的配置段添加CharacterSet = ISO-8859-1,避免驱动层面强制使用UTF-8解码覆盖代码配置。 - 升级pyodbc到最新正式版本,部分旧版本存在setencoding/setdecoding参数不生效的已知bug。
- 若以上方案仍未解决,可先读取单条返回值的原始字节流,确认数据库实际返回的编码是否确实为ISO-8859-1,不排除实际为GBK、CP1252等其他编码的可能性。
内容的提问来源于stack exchange,提问作者haramino1
相关产品推荐
相关产品推荐

