freeTDS不使用其配置

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

现在一些数据:

  1. 当我ping服务器时-没有任何数据包丢失。
  2. 当我在1433端口上远程登录服务器时-建立连接
  3. 当我使用命令

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

系统提示我输入密码并建立连接。

  1. 在命令前没有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

  1. 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

  1. 上面给定位置的freetds.conf中包含以下条目:

        [MSSQL]

host = >IP<

port = 1433

tds version = 7.0

  1. 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

  1. 我的odbc.ini:

        [MSSQL]

Description = MS SQL Server

Driver = FreeTDS

TDS_Version = 7.0

Server = >IP<

UID = username

PWD = password

ReadOnly = No

Port = 1433

我想解决方案真的很简单,但是我太愚蠢了,找不到它…

回答:

我今天花了很长时间调试类似的问题。我在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不使用其配置 的全部内容, 来源链接: utcz.com/qa/418194.html

回到顶部