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

使用pyodbc无法更新Access数据库中超过255字符的长文本字段

解决pyodbc更新Access Long Text(Rich Text)字段时的255字符限制问题

我之前也碰到过一模一样的问题!当用pyodbc往Access的Rich Text格式Long Text字段插入/更新超过255字符的内容时,确实会触发HY104这个精度错误——本质是pyodbc默认给字符串参数设置的长度上限是255,和Long Text字段的需求不匹配。

下面是几个亲测有效的解决方法:

方法1:显式指定参数的SQL类型为TEXT

在绑定参数的时候,不要让pyodbc自动推断类型,手动指定SQL_LONGVARCHAR(或SQL_WLONGVARCHAR针对Unicode内容),强制适配Long Text字段的长度要求。示例代码如下:

import pyodbc
from pyodbc import SQL_LONGVARCHAR

# 建立数据库连接
conn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\path\to\your\database.accdb;')
cursor = conn.cursor()

# 超过255字符的富文本内容
long_rich_text = "<div>这里是包含HTML格式的长文本内容,长度远超255字符...(省略大量内容)</div>"

# 显式指定参数类型为SQL_LONGVARCHAR
cursor.execute("UPDATE YourTable SET Description = ? WHERE ID = ?", (long_rich_text, 1))

# 提交更改并关闭连接
conn.commit()
cursor.close()
conn.close()

方法2:设置参数长度为0适配字段上限

另一个实用技巧是在定义参数时将长度设为0,让pyodbc自动识别目标字段的最大长度,而非默认的255。示例:

import pyodbc

conn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\path\to\your\database.accdb;')
cursor = conn.cursor()

long_text = "这里是超过255字符的普通长文本内容...(省略大量内容)"
# 用Param对象设置长度为0
custom_param = pyodbc.Param(pyodbc.SQL_VARCHAR, value=long_text, length=0)

cursor.execute("UPDATE YourTable SET Description = ? WHERE ID = ?", (custom_param, 1))
conn.commit()

cursor.close()
conn.close()

额外注意事项

  • 再次确认你的Access字段确实是Long Text类型,且格式设置为Rich Text(虽然你已经调整过,但二次验证能排除配置遗漏);
  • 如果内容包含HTML标签(Rich Text本质是带HTML格式的文本),无需转义标签,直接传入即可,Access会正确解析显示;
  • 务必使用参数化查询,避免直接拼接SQL字符串——不仅会触发精度问题,还存在SQL注入风险。

内容的提问来源于stack exchange,提问作者user3187129

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:33:14