我使用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' => '',
],
答案 0 :(得分:0)
我终于弄明白了。这不是与Laravel,FreeTDS或MSSQL相关的问题,而是我的OpenVPN配置和数据压缩的问题。我使用的OpenVPN客户端配置文件设置了comp-lzo off
,但为了使其正常工作,我需要将其更新为comp-lzo yes
。当我在日志文件中看到与压缩相关的通知时,我注意到了这一点,OpenVPN文档让我做出了改变。
希望这有助于将来。