【问题标题】:PHP and MSSQL - LARGE text field retrievalPHP 和 MSSQL - 大文本字段检索
【发布时间】:2009-09-30 18:01:21
【问题描述】:

这是我的交易:我有一个在 Windows 服务器上运行 PHP 5(特别是 5.2.5)的站点,它正在与 MSSQL 2005 数据库对话以获取其数据。我正在使用最新版本的 ADODB 框架访问数据库。我有一个具有唯一 ID 和文本字段的表。这一切都很好,直到文本字段达到一定大小(还不能确定确切的截止点)

当我尝试从数据库中检索大约 500 万个字符长的字符串时,问题就出现了。如果我通过 SQL Management Studio 执行此检索并返回所有数据,则此检索工作正常。

当查询通过 PHP 运行时,SQL 服务器没有返回任何错误消息,但它没有返回任何实际数据。

我玩过通常的嫌疑人,比如像这样增加 mssql.textlimit 和 textsize 配置选项:

ini_set("mssql.textlimit",2147483647 );
ini_set("mssql.textsize",2147483647 );

我也尝试发送“set textsize 2147483647”查询,没有任何变化。

如果我获取数据的子字符串,理论上我可以将它们拼凑在一起,但子字符串返回一个 varchar,它被限制为 8000 个字符,因此需要类似 875 个查询才能获得全部数量,这并不是真正的好主意。

有人有什么想法吗? +

【问题讨论】:

  • ADODB 是否截断响应?这就是您要克服的问题吗?

标签: php sql-server


【解决方案1】:

这可能是你的一个选择max_allowed_packet
编辑:

'
mysql> SET max_allowed_packet = 2147483647;
mysql> SELECT id, comment FROM table
    -> ORDER BY comment;
'
That should work

【讨论】:

【解决方案2】:

PHP ini 有几个您需要查看的变量:max_execution_timememory_limit 是两个。

扩展:

我不使用 ADODB,但我确实处理过大的记录和记录集。 PHP 可能会在执行期间超时(如果查询很困难),也可能会阻塞结果的大小。有时您会收到错误消息,有时则不会。 ADODB 可能会从用户那里屏蔽这些错误——我不知道。找出是否是这种情况的最简单方法是使用 mssql_query() 而不是框架通过 PHP 运行查询。如果它不崩溃,ADODB 就是问题所在。如果是这样,请摆弄 php.ini。

【讨论】:

  • 我认为这不能解决问题中的问题。问题似乎是 ADODB 正在截断响应。这里的一些澄清可能在这里有用。
【解决方案3】:

您是否尝试将数据库中的字段设置为 BLOB?还是二进制?如果它那么长,最好把它当作一个文件来对待。

如果您有很多这样的文件,此时您可能还想研究一下像 Voldemort 或 Amazon 的 Dynamo 这样的键值对存储系统。关系数据库不能很好地处理如此大的数据块。是的,您确实提到管理工具可以很好地处理它,但它会扩展吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多