我在Laravel 3中制作了一个工作项目,必须切换到MsSQL Server(虽然不是我的电话,嗅探...),但我不理解此数据库类型上的Laravel配置...

我将database.php内的默认值更改为此'default' => 'sqlsrv',然后在sqlsrv数组中配置了主机,数据库,用户名,密码,但随后出现此错误消息:



经过一番研究,我发现我们需要SQLSRV的PDO,该版本在5.4版中已经存在,在phpinfo中,我得到了返回的pdo_sqlsrv support : enabled,因此,这似乎是正确的,但同时它似乎要求进行ODBC SQLSRV连接,我真的必须使用那个?

我宁愿直接从Laravel数据库连接进行连接...但是,即使我需要它并且创建了到服务器的ODBC连接,如何将它们放入配置中?这是我的配置文件(当然my...替换为我的真实详细信息):

'sqlsrv' => array(
    'driver'   => 'sqlsrv',
    'host'     => 'myServerIP',
    'database' => 'myDatabase',
    'username' => 'myUsername',
    'password' => 'myPassword',
    'prefix'   => '',
 ),

任何帮助将不胜感激,我发现唯一接近我问题的是Laravel论坛中的以下链接:Laravel query on SQL Server,但随后就停止了而未提供任何配置。

最佳答案

这就是我将Laravel应用程序连接到MS SQL Server的过程:

  • sudo apt-获取更新
  • sudo apt-get install php5-sybase

  • 如果您尝试安装php5-mssql,它将仍然安装php5-sybase,它是``php5的Sybase/MS SQL Server模块''。

    这将使Laravel使用dblib驱动程序代替sqlsrv。

    checkout 该文件以供引用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.charset =“ISO-8859-1” )

    将其设置为 mssql.charset ==“UTF-8” <>

    保存并退出
  • 现在重新启动您的服务器(nginx或Apache或php-fpm)
  • 当然,您知道您需要将数据库配置设置为默认情况下使用sqlsrv 'default' => 'sqlsrv',并添加您的凭据。


  • 其他方法:

    您可以使用ODBC驱动程序进行连接

    这是一个很好的软件包https://github.com/ccovey/odbc-driver

    10-07 13:26