我在Windows 10机器上安装了64位R版本3.6.0。
我使用以下代码在我的机器上建立与本地MySQL数据库的连接
library(DBI)
con <- dbConnect( odbc::odbc(),"my_dsn")
其中,
my_dsn
是ODBC数据源管理器中定义的MySQL数据库的64位系统DSN。在全新的R Studio或R GUI会话中执行此代码是可行的,并提供了预期的连接对象。所以我将代码保存到
C:/some_folder_location/my_script.R
的R脚本中。现在,我希望从批处理文件中调用脚本。批处理文件包含以下代码:
cd /d C:\some_folder\
"C:\Program Files\R\R-3.6.0\bin\i386\Rscript.exe" my_script.R
pause
执行批处理文件时,出现以下错误:
错误:nanodbc / nanodbc.cpp:950:IM014:[Microsoft] [ODBC驱动程序
管理员]指定的DSN包含架构之间的不匹配
驱动程序和应用
执行停止
所以我的问题是,为什么在由批处理文件执行时此代码突然不起作用?错误消息似乎表明DSN存在问题,但我们知道并非如此,原因是脚本直接从控制台运行而没有问题。
最佳答案
通常,该错误是由于32/64位驱动程序和32/64位平台不匹配而发生的。根据平台类型(32位和64位),您可能安装了两个版本的R(即,两个不同的Rscript.exe
),而版本(3.2和3.5)进一步复杂了。例如:
您的Rscript.exe表示32位R版本的子文件夹i386
与64位DSN不兼容。
您的RStudio和RGui可能正在运行与您的DSN兼容的64位R版本。用R.home()
检查。
这与批处理文件夹相同吗?如果不是,请在此目录的bin中使用Rscript.exe
。
要在R GUI或批处理工具中检查可用数据源,请调用以下命令并比较结果:
library(odbc)
odbcListDataSources() # SEE IF DSN SHOWS
odbcListDrivers() # SEE IF DSN USES AVAILABLE DRIVER
关于mysql - 当从批处理文件调用的脚本执行R的dbConnect时,失败并显示“DSN错误”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58977932/