这是我的交易:我在Windows服务器上有一个运行PHP 5(特别是5.2.5)的站点,它正在与MSSQL 2005数据库讨论它的数据。我正在使用最新版本的ADODB框架访问数据库。我有一个具有唯一ID和文本字段的表。这一切都很好,直到文本字段达到一定的大小(尚未能确定确切的截止点)
当我尝试从数据库中检索大约500万字符长的字符串时,问题就出现了。如果我通过SQL Management工作室执行此操作并返回所有数据,则此检索工作正常。
当查询通过PHP运行时,SQL服务器没有返回任何错误消息,但它没有返回任何实际数据。
我玩过常见的嫌疑人,比如提高mssql.textlimit和textsize配置选项,如下所示:
ini_set("mssql.textlimit",2147483647 );
ini_set("mssql.textsize",2147483647 );
我也尝试过发送“set textsize 2147483647”的查询,但没有任何变化。
如果我获取数据的子字符串,理论上我可以将它们全部拼凑在一起,但是substring返回一个varchar,它限制为8000个字符,因此需要875个查询来获取全部数量而不是真正的好主意。
有人有什么想法吗? +
答案 0 :(得分:1)
Hy这可能是你的选择max_allowed_packet
编辑:
'
mysql> SET max_allowed_packet = 2147483647;
mysql> SELECT id, comment FROM table
-> ORDER BY comment;
'
That should work
答案 1 :(得分:0)
PHP ini有几个你想看的变量:max_execution_time
和memory_limit
是两个。
扩展:
我不使用ADODB,但我会处理超大记录和记录集。 PHP可以在执行期间超时(如果查询很困难),也可以阻塞结果的大小。有时您会收到错误消息,有时则不会。 ADODB可能会掩盖用户的这些错误 - 我不知道。查明是否是这种情况的最简单方法是使用mssql_query()
而不是框架通过PHP运行查询。如果没有cack,ADODB就是问题所在。如果是这样,请使用php.ini。
答案 2 :(得分:0)
您是否尝试将数据库中的字段设置为BLOB?还是二进制?如果时间长,那么将它当作文件处理可能会更好。
如果你有很多像这样的文件,你可能还想看看像Voldemort或亚马逊的Dynamo这样的Key-Value存储系统。关系数据库不能很好地处理如此大的数据块。是的,你确实提到管理工具处理得很好,但它会扩展吗?