Windows11下R-Studio通过ODBC执行查询时出现1655错误求助
问题
更换Windows 11机器后,在R-Studio中通过ODBC可正常建立数据库连接,但执行查询语句时出现nanodbc/nanodbc.cpp:1655错误,同款代码在原Windows 10机器上运行正常。
连接代码:
library(odbc) library(DBI) ImpODBC <- dbConnect(odbc::odbc(), "********", uid = "******", PWD = "*******")
查询代码:
IMP_Sales <- dbGetQuery(ImpODBC, "Select SBLOC,SBCUST,SBSMNO,SBITEM,SBTYPE,SBINDT,SBPHYP,SBQSHP,SBEPRC,SBPRIC,SBICST,SBINV,SBCOSTPC,SBUM,SASHIP From R50FILES.VSADETL JOIN R50FILES.VSAHEAD ON SBCMP=SACMP and SBORD=SAORD and SABOCD=SBBOCD Where SBINV<>999999999 and SBPCOD <> 'LS' and SBCMP = 1 and SBPHYP between 202201 and 202212 and SBITEM <> ''")
错误信息:
Error: nanodbc/nanodbc.cpp:1655: HY000: 躠娽ŋ 覀娽ŋ <SQL> 'Select SBLOC,SBCUST,SBSMNO,SBITEM,SBTYPE,SBINDT,SBPHYP,SBQSHP,SBEPRC,SBPRIC,SBICST,SBINV,SBCOSTPC,SBUM,SASHIP From R50FILES.VSADETL JOIN R50FILES.VSAHEAD ON SBCMP=SACMP and SBORD=SAORD and SABOCD=SBBOCD Where SBINV<>999999999 and SBPCOD <> 'LS' and SBCMP = 1 and SBPHYP between 202201 and 202212 and SBITEM <> '''
问题原因分析
- 字符编码不兼容:Windows 11与Windows 10的默认编码存在差异,错误信息里的乱码就是明显信号。查询语句末尾的
SBITEM <> ''在报错的SQL中变成了SBITEM <> ''',说明字符串转义出现异常,本质是编码不匹配导致ODBC驱动解析SQL时出现乱码和语法错误。 - ODBC驱动兼容性问题:Windows 11上安装的ODBC驱动版本与Windows 10不一致,或者驱动未针对Win11做适配。虽然驱动能完成连接,但执行查询时对SQL语句的处理逻辑出现错误。
- R/RStudio环境编码设置差异:Windows 11下RStudio的默认编码(比如UTF-8与GBK的切换)和Win10不同,导致生成的SQL语句编码不符合数据库或驱动的要求,最终无法正确解析执行。
内容的提问来源于stack exchange,提问作者Grigory Slepak
相关产品推荐
相关产品推荐

