freeTDS不使用其configuration

我决定使用FreeTDS驱动程序和unixODBC来pipe理基于LAMP的应用程序与远程MsSQL数据库之间的PDO连接。 不幸的是,驱动程序似乎没有读取freetds.conf文件,也没有直接通过服务器的CLI设置环境variables,或者通过putenv()函数在php文件中指定环境variables。

现在有些数据:

  1. 当我ping服务器 – 没有数据包丢失。
  2. 因为我在1433端口telnet服务器 – 连接build立
  3. 因为我使用的命令

    TDSVER=7.0 tsql -H >IP< -p 1433 -U username 

    我被提示input密码并build立连接。

  4. 没有TDSVER命令之前 – 连接失败,这样的消息:

     Error 20017 (severity 9): Unexpected EOF from the server OS error 115, "Operation now in progress" Error 20002 (severity 9): Adaptive Server connection failed There was a problem connecting to the server 
  5. tsql -C命令回声这样一个输出:

     Compile-time settings (established with the "configure" script) Version: freetds v0.91 freetds.conf directory: /usr/local/etc MS db-lib source compatibility: yes Sybase binary compatibility: no Thread safety: yes iconv library: yes TDS version: 5.0 iODBC: no unixodbc: yes SSPI "trusted" logins: no Kerberos: no 
  6. 在上面给出的位置freetds.conf有这样的条目:

     [MSSQL] host = >IP< port = 1433 tds version = 7.0 
  7. ISQL也失败:

     isql -v MSSQL [S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source [01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed [ISQL]ERROR: Could not SQLConnect 
  8. 我的odbc.ini:

     [MSSQL] Description = MS SQL Server Driver = FreeTDS TDS_Version = 7.0 Server = >IP< UID = username PWD = password ReadOnly = No Port = 1433 

我想这个解决scheme非常简单,但是我太愚蠢了,找不到它…

Solutions Collecting From Web of "freeTDS不使用其configuration"

我的直觉是你需要在你的freetds.conf和odbc.ini文件中将你的tds version = 7.0改为tds version = 8.0 ,并且你需要odbcinst.ini文件中的东西。 以下是我正在使用Ubuntu 12.04服务器与远程MSSQL服务器通话的内容:

freetds.conf

 # Define a connection to the MSSQL server. [mssql] host = myserver port = 1433 tds version = 8.0 

ODBC.INI

 # Define a connection to the MSSQL server. # The Description can be whatever we want it to be. # The Driver value must match what we have defined in /etc/odbcinst.ini # The Database name must be the name of the database this connection will connect to. # The serverName is the name we defined in /etc/freetds/freetds.conf # The TDS_Version should match what we defined in /etc/freetds/freetds.conf [mssql] Description = MSSQL server Driver = freetds Database = MyDB serverName = myserver TDS_Version = 8.0 

ODBCINST.INI

 # Define where to find the driver for the Free TDS connections. [freetds] Description = MS SQL database access with Free TDS Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so UsageCount = 1 

我今天花了很长时间调试类似的问题。 我在freetds.conf中设置了“TDS版本”,但没有在我的ODBC连接中使用。 在阅读freetds源代码(connectparams.c:odbc_parse_connect_string)之后,我发现:

  • 如果连接字符串使用“SERVER =”,则freetds.conf和odbc.ini都将被忽略
  • 如果连接字符串使用“SERVERNAME =”,则使用相应的freetds.conf服务器中的设置
  • 如果连接字符串使用“DSN =”,则使用相应的odbc.ini DSN中的设置

odbcinst.ini是一个红鲱鱼。 FreeTDS从不检查设置。

始终遵守您在连接字符串中指定的设置。 它也总是尊重像TDSVER这样的环境变量。

我遇到了完全相同的问题,但我的配置已经正确设置。 问题是freetds.conf能识别的TDS版本在新版本中已经发生了变化,但显然旧版本仍然在TDSVER环境变量中工作。 一旦我把配置文件中的版本设置为7.1而不是8.0,所有的东西都开始工作了。

通过在我的odbc.ini文件的末尾添加以下内容解决了初始TDSVER=7.0问题:

 [Default] Driver=/usr/local/lib/libtdsodbc.so 

尝试连接到配置节的名称,而不是连接到IP? 例如:

 isql -v MSSQL