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

通过pyodbc读取Sybase image列时数据被截断至32KiB的问题

问题原因与解决办法

问题根源

这是FreeTDS的默认textsize限制导致的。FreeTDS默认仅读取32KB左右的大字段数据(对应你看到的33KB截断),和pyodbc本身的读取限制无关。

解决办法

1. 修改FreeTDS全局配置

编辑/etc/freetds/freetds.conf,在[global]段或者你的目标数据库连接段中添加:

text size = 10485760

(10485760字节=10MB,可根据实际文件大小调整更大值),保存后新的连接会自动生效。

2. 在Python代码中临时设置TEXTSIZE

在执行查询前,通过SQL命令临时设置当前连接的textsize,覆盖默认限制:

driver = "FreeTDS"
prt = 'port'
db = 'db'
passwd = 'passwd'
usr = 'usr'
serv = 'serv'
conn = pyodbc.connect(driver=driver, server=serv, port=prt, uid=usr, pwd=passwd)

# 新增:设置textsize为10MB
conn.execute("SET TEXTSIZE 10485760")

sql_query = (
    "SELECT ARCH_DOC_DOC as file_content FROM table_name WHERE ARCH_DOC_ID = id"
)
cursor = conn.cursor()
cursor.execute(sql_query)
pdf_data = cursor.fetchone()[0]
with open('my_test_file.pdf', 'wb') as f:
    f.write(pdf_data)

3. 优化FreeTDS的TDS版本配置

当前FreeTDS的TDS版本设为auto,建议明确指定为Sybase兼容的版本(比如8.0),在freetds.conf中添加:

tds version = 8.0

避免协商到低版本协议影响大字段读取。

验证

修改后重新运行代码,检查生成的PDF文件大小是否与数据库中原始文件一致,且能正常打开。

内容的提问来源于stack exchange,提问作者Mohamed Amine Mejri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:57:28