Laravel 5.2 MSSQL连接问题

时间:2017-06-17 19:53:47

标签: sql-server laravel freetds

我使用FreeTDS + UnixOdbc通过VPN连接到远程MSSQL DB。我也在使用Vagrant。我可以通过SSH进入我的流浪盒并运行我的tsql命令并连接到我在freetds.conf文件中设置的实例。

但是Laravel应用程序本身并没有连接。它是由Nginx驱动的。我在PDOException: SQLSTATE[HY000] Read from the server failed中收到了laravel.log条消息。

这是我的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

如果我将版本更改为7.2,我认为freetds v 0.91支持,那么我收到此消息:

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' => '',
],

1 个答案:

答案 0 :(得分:0)

我终于弄明白了。这不是与Laravel,FreeTDS或MSSQL相关的问题,而是我的OpenVPN配置和数据压缩的问题。我使用的OpenVPN客户端配置文件设置了comp-lzo off,但为了使其正常工作,我需要将其更新为comp-lzo yes。当我在日志文件中看到与压缩相关的通知时,我注意到了这一点,OpenVPN文档让我做出了改变。

希望这有助于将来。