freeTDS不使用其配置
我决定使用FreeTDS驱动程序和unixODBC来管理基于LAMP的应用程序与远程MsSQL数据库之间的PDO连接。不幸的是,驱动程序似乎没有读取freetds.conf文件,也没有直接通过服务器的CLI设置或由putenv()函数在php文件中指定的环境变量。
现在一些数据:
- 当我ping服务器时-没有任何数据包丢失。
- 当我在1433端口上远程登录服务器时-建立连接
- 当我使用命令
TDSVER=7.0 tsql -H >IP< -p 1433 -U username
系统提示我输入密码并建立连接。
- 在命令前没有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
- 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
- 上面给定位置的freetds.conf中包含以下条目:
[MSSQL] host = >IP<
port = 1433
tds version = 7.0
- 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
- 我的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