【问题标题】:Getting General error: 4004 General SQL Server error:获取一般错误:4004 一般 SQL Server 错误:
【发布时间】:2016-07-25 12:41:58
【问题描述】:

我正在尝试从 Laravel 中的数据库中获取数据,但是我收到“一般错误:4004 一般 SQL Server 错误:”

我将 Laravel-5 与 MSSQL 一起使用。 如果我使用 DB 对象从 MSSQL 中获取数据,我将无法获取 xml 和 nvarchar 字段,

我在下面找到了一个有用的链接,但要实现它,我必须重写我的所有查询。有没有其他办法?

https://gullele.wordpress.com/2010/12/15/accessing-xml-column-of-sql-server-from-php-pdo

【问题讨论】:

  • 错误消息:SQLSTATE[HY000]:一般错误:4004 一般 SQL Server 错误:检查来自 SQL Server 的消息 [4004](严重性 16)[(null)](SQL:选择顶部 1 *来自 [forms] 其中 [id] = 1)
  • 使用tags 下的edit 链接将错误消息添加到您的问题中。您还应该提供您的代码和表格的结构。

标签: php sql-server pdo laravel-5


【解决方案1】:

请尝试:

 $handle = getHandle();
 $handle->exec('SET QUOTED_IDENTIFIER ON');
 $handle->exec('SET ANSI_WARNINGS ON');
 $handle->exec('SET ANSI_PADDING ON');
 $handle->exec('SET ANSI_NULLS ON');
 $handle->exec('SET CONCAT_NULL_YIELDS_NULL ON');

您还可以检查服务器配置: 检查“/etc/freetds.conf”文件并更改tds版本并添加客户端字符集然后在php.ini中请检查mssql.charset和default_charset

在 /etc/freetds.conf 中:

;tds version = 4.2
tds version = 8.0
client charset = UTF-8

在 php.ini 中:

mssql.charset = "UTF-8"
default_charset = "utf-8"

【讨论】:

  • tds version = 8.0 不是有效的 tds 版本。请使用自动。
  • @AlexBarker 有效但应该避免,因为它是一个非常旧的版本,将来可能会导致版本冲突。
【解决方案2】:

对其他人来说最重要的信息是问题的答案:错误 4004(严重性 16)是什么意思?

错误 4004: 无法将纯 Unicode 排序规则中的 Unicode 数据或 ntext 数据发送到使用 DB-Library(例如 ISQL)或 ODBC 3.7 或更早版本的客户端。

(Source)

就我而言,在迁移到 SQL Server 2016 并设置 tds version = 7.4 后,我必须将 STUFF() 子句转换为 VARCHAR(MAX) 以解决错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多