PHP和MSSQL - 大型文本字段检索

3
这是我的问题:我有一个运行在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是否截断响应?这是你试图克服的问题吗? - Neel
3个回答

1

嗨,这可能是一个选项适合您max_allowed_packet
编辑:

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

还请查看以下网站: http://cvs.moodle.org/moodle/lib/adodb/adodb-perf.inc.php?view=co - streetparade

0

PHP ini有几个变量你需要关注:max_execution_timememory_limit是其中两个。

扩展:

我不使用ADODB,但我处理过超大的记录和记录集。在执行过程中,PHP可能会超时(如果查询很复杂)或者在结果的大小上出现问题。有时候会显示错误信息,有时候则不会。可能ADODB会隐藏这些错误信息,我不确定。要找出是否是这种情况,最简单的方法是通过PHP使用mssql_query()来运行查询,而不是使用框架。如果没有问题,那么ADODB就是问题所在。如果有问题,就调整php.ini文件。


我认为这并没有解决问题。问题似乎是ADODB正在截断响应。在这里进行一些澄清可能会有所帮助。 - Neel

0
你有尝试过将数据库中的字段设置为BLOB或二进制吗?如果数据很长,那么将其视为文件可能更好。
此时,您还可以考虑键值存储系统,如Voldemort或亚马逊的Dynamo,如果您将拥有许多这样的文件。关系型数据库不能很好地处理如此大的数据块。是的,您确实提到了管理工具能够很好地处理它,但它是否可以扩展呢?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接