【发布时间】:2017-11-20 09:17:21
【问题描述】:
我正在使用 FreeTDS + UnixOdbc 通过 VPN 连接到远程 MSSQL DB。我也在使用流浪者。我可以通过 SSH 连接到我的 vagrant box 并运行我的tsql 命令并连接到我在freetds.conf 文件中设置的实例。
但是 Laravel 应用程序本身没有连接。它由 Nginx 驱动。我在laravel.log 中收到PDOException: SQLSTATE[HY000] Read from the server failed 消息。
这是我的freetds.conf 文件:
[SDSQL2DEV]
host = xx.xxx.xx.xx
instance = sdsql2\dev
port = 65156
client charset = UTF-8
tds version = 4.2
请注意,我必须将 tds 版本设置为 4.2,否则无论我做什么,我都无法使用 tsql 连接或运行查询。看来我可能有更深层次的问题。
我确定正在使用正确的 freetds.conf 文件。我可以运行tsql -C 并查看我切换的设置生效。以下是输出:
Version: freetds v0.91
freetds.conf directory: /etc/freetds
MS db-lib source compatibility: no
Sybase binary compatibility: yes
Thread safety: yes
iconv library: yes
TDS version: 4.2
iODBC: no
unixodbc: yes
SSPI "trusted" logins: no
Kerberos: yes
如果我将版本更改为我认为 freetds v 0.91 支持的 7.2,那么我会收到以下消息:
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 100 (severity 11):
unrecognized msgno
我对 Laravel 非常有经验,只是没有与 MSSQL 集成,但我认为我的 Laravel 设置配置正确。他们在这里:
// .env
MS_CONNECTION="sqlsrv"
MS_HOST="xx.xxx.x.x"
MS_PORT="65156"
MS_DATABASE="dbname"
MS_USERNAME="dbuser"
MS_PASSWORD="dbpass"
// config/database.php
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => env('MS_HOST', 'SDSQL2DEV'),
'port' => env('MS_PORT', '65156'),
'database' => env('MS_DATABASE', 'forge'),
'username' => env('MS_USERNAME', 'forge'),
'password' => env('MS_PASSWORD', ''),
'collation' => 'SQL_Latin1_General_CP1_CI_AS',
'prefix' => '',
],
【问题讨论】:
-
SQL Server 版本是多少?
-
Microsoft SQL Server 2014 - 12.0.4100.1 (X64)
-
您是否尝试过将 freetds.conf 的
tds version设置为 7.0、7.1 或 8.0?
标签: sql-server laravel freetds