我在Laravel 3中做了一个工作项目,我必须切换到MsSQL Server(不过不是我的调用,sniff…),我不理解这个数据库类型上的Laravel配置。。。
我将database.php
中的默认值更改为'default' => 'sqlsrv'
,然后在sqlsrv
阵列中配置了主机、数据库、用户名和密码,但随后我收到了以下错误消息:
此扩展要求Microsoft SQL Server 2012 Native Client ODBC驱动程序与SQL Server `通信
经过一番研究,我发现我们需要SQLSRV的PDO,我已经有了5.4版本的PDO。在我的phpinfo
中,我得到了返回的pdo_sqlsrv support : enabled
,所以这似乎都是正确的,但同时它似乎要求ODBC SQLSRV连接,我真的必须使用它吗?
我宁愿直接从Laravel数据库连接。。。但是,即使我需要它,并且我创建了一些到服务器的ODBC连接,我该如何将它们放入我的配置中?以下是我的配置(当然my...
被我的真实细节所取代):
'sqlsrv' => array(
'driver' => 'sqlsrv',
'host' => 'myServerIP',
'database' => 'myDatabase',
'username' => 'myUsername',
'password' => 'myPassword',
'prefix' => '',
),
任何帮助都将不胜感激,我发现的唯一接近我的问题的是Laravel论坛上的这个链接:SQL Server上的Laravel查询,但随后它就停止了,没有给出任何配置。
这就是我将Laravel应用程序连接到MS SQL Server时所做的:
-
sudo apt-get更新
-
sudo apt-get-install php5-sybase
如果您尝试安装php5-mssql,它无论如何都会安装php5-sybase,它是"php5的sybase/MS SQL Server模块"。
这将使Laravel使用dblib驱动程序而不是sqlsrv。
查看此文件以获取参考Illuminate''Database''Connectors''SqlServerConnector.php.
- 打开此文件:/etc/freetds/freetds.conf
[global]
段和tds version = 4.2
下
添加tds version = 8.0
(不带;行首半列)
并将客户端charset = UTF-8
添加到上述行的正下方(不包括;该行开头的半列)
这可以让驱动程序对utf-8中的所有数据进行编码,并避免数据中的奇怪字符
文件将如下所示:
[global]
# TDS protocol version
; tds version = 4.2
tds version = 8.0
client charset = UTF-8
- 在/etc/freetds目录中创建文件locales.conf,并在其中经过以下步骤:(这允许使用SQL Server正确解析日期)
[default]
date format = %Y-%m-%d %I:%M:%S.%z
[en_US]
date format = %b %e %Y %I:%M:%S:%z%p
language = us_english
charset = iso_1
- 编辑php.ini文件
首先使用php-i|grep-php.ini查找文件
然后打开文件并搜索mssql.charset(它可能会像这样被禁用;mssql.chardset="ISO-8859-1")
使其mssql.charset="UTF-8"<lt;请确保删除;半列以启用它>gt;
保存并退出
现在重新启动您的服务器(nginx或apache或php-fpm)
当然,您知道需要将数据库配置设置为默认使用sqlsrv
'default' => 'sqlsrv',
,并添加凭据。
其他方法:
可以使用ODBC驱动程序连接
这是个不错的包裹https://github.com/ccovey/odbc-driver
Ahh经过更多的研究,我发现我的SQL Server Native Client 10.0
驱动程序已经过时,不足以连接到带有PDO的MsSQL Server 2008
,您需要至少有11.0
版本才能连接到SQL Server 2005+
如果您想验证您的驱动程序版本,您可以浏览Control Panel >> Administrative Tools >> Data Sources (ODBC)
,然后单击Drivers
选项卡,找出您已经安装的SQL Server Native Client
。如果你想更新你的驱动程序,根据你的操作系统配置,你可以选择下面的正确链接。。。
SQL Server 2012本机客户端
x86(32位)包http://go.microsoft.com/fwlink/?LinkID=239647&clcid=0x409
x64(64位)程序包http://go.microsoft.com/fwlink/?LinkID=239648&clcid=0x409
对于Linux,Laravel 5和php 7.1:
- 按此处所述添加连接
sudo apt install php7.1-sybase
- 重试:)
获得解决方案。试试这个
-
单击创建的实例的协议
参考:https://i.stack.imgur.com/O6Dyn.png
-
启用IP设置
参考:https://i.stack.imgur.com/64j11.png
-
右键单击IP设置>属性>IP地址>IP全部>IP端口:将其设置为1433作为默认的SQL Server数据库端口。
参考:https://i.stack.imgur.com/ZQ7MR.png
希望它能有所帮助。非常感谢。