【发布时间】:2016-11-12 13:31:29
【问题描述】:
我正在Laravel 中创建一个应用程序,它访问存储在远程数据库Microsoft SQL Server 中的信息。
我遇到了一个错误,我解决了;但我不太清楚为什么......
问题
我在Microsoft SQL Server 的数据库中创建了一个“users”表,以便通过登录系统使用该应用程序:运行良好。
我的工作是显示来自Microsoft SQL Server 中现有数据库中的表的信息......所以我创建了其中一个表的model——例如,称为Sales—— 但是当我尝试查询信息时:
$sale = Sales::find("1");
我得到下一个错误:
SQLSTATE[HY000]: General error: 4004 General SQL Server error: Check messages from the SQL Server [4004] (severity 16) [(null)]
与其他Eloquent 方式和Fluent 相同的错误。
有问题的表
这些是一些具有查询表的列:
我是如何解决这个问题的:
我已经解决了在两个配置文件中进行两次更改:
1) 内部 /etc/freetds/freetds.conf
我将 tds 版本从:
tds version = 4.2
到
tds version = 8.0
并设置客户端字符集如下:
client charset = UTF-8
2) 内部/etc/php5/apache2/php.ini
mssql.charset = "UTF-8"
default_charset = "UTF-8"
我的问题:为什么会这样?
根据我的阅读,这是由于:
Laravel 使用 db-library(如果可用)连接到无法从 MSSQL 接收 unicode 数据的 Sql Server。 (1,2)——来自Here
所以我猜这可能是由于类型字段nvarchar...但是当我更改模型以删除所有带有nvarchar 的字段时,我仍然遇到同样的问题...
我的 Laravel 数据库配置片段:config/database.php
[...]
'default' => 'sqlsrv',
[...]
'sqlsrv' => array(
'driver' => 'sqlsrv',
'host' => 'foo.bar',
'database' => 'MyDataBase',
'username' => 'UserName',
'password' => 'MySecret',
'prefix' => ''
)
[...]
不知道有没有另外一个configuration为sqlsrv指定FreeTDS的版本。
tsql -C 命令的结果:
【问题讨论】:
标签: sql-server laravel freetds nvarchar