You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:24:00