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

pyodbc如何传递nvarchar类型参数解决SQL Server特殊字符匹配问题

问题根因

你遇到的问题本质是pyodbc默认将Python字符串参数映射为SQL Server的varchar类型,非ASCII字符会在类型转换时丢失编码信息,导致查询匹配不到结果,只要让驱动把对应参数按nvarchar类型传递即可解决。

解决方案

方法1:修改数据库连接配置(推荐)

在pyodbc连接SQL Server的连接字符串中添加CHARSET=UTF8参数,示例代码如下:

import pyodbc

conn = pyodbc.connect(
    "DRIVER={ODBC Driver 17 for SQL Server};"
    "SERVER=你的服务器地址;"
    "DATABASE=你的数据库名称;"
    "UID=登录账号;"
    "PWD=登录密码;"
    "CHARSET=UTF8;"  # 新增该配置项
)

配置完成后,pyodbc传递的所有字符串参数都会默认按Unicode编码对应SQL Server的nvarchar类型,你现有的cursor.execute(query, paramValues)代码无需修改即可直接运行。

方法2:手动指定参数为nvarchar类型

如果不方便修改全局连接配置,可以针对需要传nvarchar的参数单独指定SQL类型,将对应参数包装为(类型标识, 值)的元组即可:

import pyodbc
from pyodbc import SQL_WVARCHAR

alertTypeName = "Boli şi Dăunători"
paramValues = [
    syswinAlertId, 
    code, 
    (SQL_WVARCHAR, alertTypeName),  # 明确指定该参数为nvarchar类型
    alertMessage, 
    createdBy, 
    modifiedBy
]
cursor.execute(query, paramValues)
注意事项
  • 不要手动给查询语句中的参数加N前缀,参数化查询的参数类型由驱动或显式指定的类型决定,硬加N前缀反而会导致参数绑定失效
  • 不要用字符串拼接的方式把参数写入SQL语句,既存在SQL注入风险,也会导致编码处理异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:36:02