如何使用 unixodbc 和 freetds 在 Mac 上安装 RODBC?
How do I install RODBC on Mac with unixodbc and freetds?
经过相当广泛的搜索后,我注意到很多人都很难找到一个从头到尾的指南来回答这个问题。 (至少 one question 注意到存在一个解决方案,但所提出的解决方案并没有解决这样一个事实,即默认情况下,RODBC 会尝试针对 iODBC 进行编译,而 iODBC 不包含在 Yosemite 中。)我只是经历了这个过程,所以我想我会在这里记录它,希望它能对其他人有所帮助。我正在连接到 SQL 服务器数据库。
使用 Homebrew as my OS X package manager, I can install RODBC
with the following steps (assuming I have already installed R).
安装unixodbc
:
$ brew install unixodbc
安装 freetds
(如有必要,将 /usr/local/Cellar/unixodbc/2.3.2_1
替换为您的 unixodbc
目录):
$ brew install --with-tdsver=8.0 --with-msdblib --with-unixodbc=/usr/local/Cellar/unixodbc/2.3.2_1 freetds
配置您的freetds
安装(以下是最小配置文件):
freetds.conf
# server specific section
[global]
; tds version = 8.0
; dump file = /tmp/freetds.log
; debug flags = 0xffff
; timeout = 10
; connect timeout = 10
text size = 64512
[TESTSQL]
# insert the actual host below
host = <xxx.xx.x.xx>
port = 1433
tds version = 8.0
测试 freetds
配置:
$ tsql -H `<xxx.xx.x.xx>` -p 1433 -U `<username>` -P `<password>`
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> exit
配置您的unixodbc
安装(以下是最小配置文件):
$ sudo vim /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbcinst.ini
odbcinst.ini
[MSSQL]
Description = Microsoft SQL Server driver
Driver = /usr/local/Cellar/freetds/0.95.18/lib/libtdsodbc.so
(和另一个最小安装文件):
$ sudo vim /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbc.ini
odbc.ini
[ODBC Data Sources]
TESTSQL = Test database
[TESTSQL]
Driver = MSSQL
Servername = TESTSQL
Port = 1433
Database = TMSEPRD
TDS_Version = 8.0
使用 isql
测试新配置:
$ isql TESTSQL `<username>` `<password>`
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> quit
为您的主目录中的文件创建符号 link:
$ ln -vs /usr/local/Cellar/freetds/0.95.18/etc/freetds.conf ~/.freetds.conf
$ ln -vs /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbc.ini ~/.odbc.ini
$ ln -vs /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbcinst.ini ~/.odbcinst.ini
查找并修改您的 RProfile
文件,方法是将以下代码行附加到文件中(将 /usr/local/include
替换为包含您的 [=38] 的包含目录=] 和 sqlext.h
文件;如果目录不存在,第二行可能是不必要的):
$ vim /Library/Frameworks/R.framework/Versions/3.2/Resources/library/base/R/Rprofile
Sys.setenv(ODBC_INCLUDE="/usr/local/include")
Sys.setenv(ODBC_LIBS="/usr/local/lib")
现在将 RODBC
包源(您下载 here)下载到您的下载文件夹。
打开一个新的 R 控制台会话并安装包(将 RODBC_1.3-12.tar.gz
替换为您的包源名称):
install.packages("~/Downloads/RODBC_1.3-12.tar.gz", repos=NULL, type="source")
包现在应该可以工作了:
> library(RODBC)
> myconn <- odbcConnect("TESTSQL", uid="<userid>", pwd="<password>")
感谢 Jared Folkins and Gabi Huiber 帮助确定 R 在默认情况下查找 RODBC 必需文件的目录。
经过相当广泛的搜索后,我注意到很多人都很难找到一个从头到尾的指南来回答这个问题。 (至少 one question 注意到存在一个解决方案,但所提出的解决方案并没有解决这样一个事实,即默认情况下,RODBC 会尝试针对 iODBC 进行编译,而 iODBC 不包含在 Yosemite 中。)我只是经历了这个过程,所以我想我会在这里记录它,希望它能对其他人有所帮助。我正在连接到 SQL 服务器数据库。
使用 Homebrew as my OS X package manager, I can install RODBC
with the following steps (assuming I have already installed R).
安装
unixodbc
:$ brew install unixodbc
安装
freetds
(如有必要,将/usr/local/Cellar/unixodbc/2.3.2_1
替换为您的unixodbc
目录):$ brew install --with-tdsver=8.0 --with-msdblib --with-unixodbc=/usr/local/Cellar/unixodbc/2.3.2_1 freetds
配置您的
freetds
安装(以下是最小配置文件):freetds.conf
# server specific section [global] ; tds version = 8.0 ; dump file = /tmp/freetds.log ; debug flags = 0xffff ; timeout = 10 ; connect timeout = 10 text size = 64512 [TESTSQL] # insert the actual host below host = <xxx.xx.x.xx> port = 1433 tds version = 8.0
测试
freetds
配置:$ tsql -H `<xxx.xx.x.xx>` -p 1433 -U `<username>` -P `<password>`
locale is "en_US.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 1> exit
配置您的
unixodbc
安装(以下是最小配置文件):$ sudo vim /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbcinst.ini
odbcinst.ini
[MSSQL] Description = Microsoft SQL Server driver Driver = /usr/local/Cellar/freetds/0.95.18/lib/libtdsodbc.so
(和另一个最小安装文件):
$ sudo vim /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbc.ini
odbc.ini
[ODBC Data Sources] TESTSQL = Test database [TESTSQL] Driver = MSSQL Servername = TESTSQL Port = 1433 Database = TMSEPRD TDS_Version = 8.0
使用
isql
测试新配置:$ isql TESTSQL `<username>` `<password>`
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> quit
为您的主目录中的文件创建符号 link:
$ ln -vs /usr/local/Cellar/freetds/0.95.18/etc/freetds.conf ~/.freetds.conf $ ln -vs /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbc.ini ~/.odbc.ini $ ln -vs /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbcinst.ini ~/.odbcinst.ini
查找并修改您的
RProfile
文件,方法是将以下代码行附加到文件中(将/usr/local/include
替换为包含您的 [=38] 的包含目录=] 和sqlext.h
文件;如果目录不存在,第二行可能是不必要的):$ vim /Library/Frameworks/R.framework/Versions/3.2/Resources/library/base/R/Rprofile Sys.setenv(ODBC_INCLUDE="/usr/local/include") Sys.setenv(ODBC_LIBS="/usr/local/lib")
现在将
RODBC
包源(您下载 here)下载到您的下载文件夹。打开一个新的 R 控制台会话并安装包(将
RODBC_1.3-12.tar.gz
替换为您的包源名称):install.packages("~/Downloads/RODBC_1.3-12.tar.gz", repos=NULL, type="source")
包现在应该可以工作了:
> library(RODBC)
> myconn <- odbcConnect("TESTSQL", uid="<userid>", pwd="<password>")
感谢 Jared Folkins and Gabi Huiber 帮助确定 R 在默认情况下查找 RODBC 必需文件的目录。