如何使用 unixodbc 和 freetds 在 Mac 上安装 RODBC?

Posted

技术标签:

【中文标题】如何使用 unixodbc 和 freetds 在 Mac 上安装 RODBC?【英文标题】:How do I install RODBC on Mac with unixodbc and freetds? 【发布时间】:2015-08-09 18:03:10 【问题描述】:

经过相当广泛的搜索后,我注意到许多人很难找到一个从头到尾的指南来回答这个问题。 (至少one question 指出存在一个解决方案,但建议的解决方案并没有解决这样一个事实,即默认情况下,RODBC 会尝试针对 iODBC 进行编译,而 iODBC 不包含在 Yosemite 中。)我刚刚完成了这个过程,所以我想我会在这里记录它,希望它可以使其他人受益。我正在连接到 SQL Server 数据库。

【问题讨论】:

谢谢,hrbrmstr。很好的建议。我刚刚从我的 iPhone 上进行了更改,但是当我再次使用我的笔记本电脑时,我会仔细检查它。谢谢! 您能否在您的问题中包含其他人遇到的一些错误/问题?这将增加他们在搜索时找到此问题的可能性。 不确定你是否听说过,有一个rsqlserver 包与 CRAN 上共享的RSQLServer 不同。第一个为 sql server 提供了更多的本地驱动程序,应该提供比 ODBC 或 JDBC 更好的速度。不确定它是否适用于 Mac。 谢谢,约书亚。一旦我能够回到我的笔记本电脑上,我就会这样做。好主意。 相关:Installing ODBC via HomeBrew. 【参考方案1】:

使用Homebrew作为我的OS X包管理器,我可以通过以下步骤安装RODBC(假设我已经安装了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
    

    创建指向主目录中文件的符号链接:

    $ 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 替换为包含您的sql.hsqlext.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 和 Gabi Huiber 帮助确定 R 默认在哪些目录中查找 RODBC 必需文件。

【讨论】:

看,Mac 很简单!谢谢你……花了太多时间来解决这个问题。 我使用步骤 1-6 让包 odbc 与 MSSQL 数据库一起工作。请注意,freetds.conf 中的 [servername] 必须与 odbc.ini 中的 [differentservername] 不同!

以上是关于如何使用 unixodbc 和 freetds 在 Mac 上安装 RODBC?的主要内容,如果未能解决你的问题,请参考以下文章

FreeTDS 和 unixodbc 安装和配置

linux使用pyodbc和freetds连接sqlserver

[S1000][unixODBC][FreeTDS][SQL Server]无法连接到数据源

Python3.x: pyodbc+freetds+unixodbc连接sybase数据库(Linux系统)

如何在LINUX下用PDO连接SQLSRVER 2008

freeTDS 不使用其配置