【发布时间】:2010-12-09 09:56:47
【问题描述】:
我正在维护一个用 PHP 编写的连接到 MSSQL 数据库的 Web 应用程序。
原开发者使用http://adodb.sourceforge.net/ 作为他的数据库。
问题是,当使用GetAll方法读取数据时,所有的字符串都被截断为255个字符。
有人能解决我的问题吗?
编辑:我遇到问题的列是varchar(800)
【问题讨论】:
标签: php sql-server database adodb
我正在维护一个用 PHP 编写的连接到 MSSQL 数据库的 Web 应用程序。
原开发者使用http://adodb.sourceforge.net/ 作为他的数据库。
问题是,当使用GetAll方法读取数据时,所有的字符串都被截断为255个字符。
有人能解决我的问题吗?
编辑:我遇到问题的列是varchar(800)
【问题讨论】:
标签: php sql-server database adodb
你到底能改变什么?
我偶然发现了这篇文章,这可能会有所帮助:ADODB Varchar Limit Problem
似乎建议您尝试的是:
varchar 更改为 text
CAST:即:
select CAST(MyColumn as text) as MyColumn
帖子引用了以下两篇文章,支持上述内容
http://php.oregonstate.edu/manual/en/ref.mssql.php#47527
http://php.oregonstate.edu/manual/en/ref.mssql.php#71602
希望对你有帮助
【讨论】:
您能否分别使用以下方法获取最后一列:
SELECT SUBSTRING (longfield,1,200) as Part1, SUBSTRING (longfield,201,200) as Part2, SUBSTRING (longfield,401,200) as Part3, SUBSTRING (longfield,601,200) as Part4
?
然后您可以将这些列重新粘合在一起。您可能需要一些特殊情况来处理字符串实际上没有那么长的情况。
【讨论】:
尝试将 drivers\adodb-mssql.inc 中的所有“255”替换为“800”或“MAX”。
或者直接转换,不改成text数据类型,text就是deprecated
【讨论】:
在 PHP 中使用 ADODB 查询 MSSQL 没有问题。我用以下方式编写查询:
<?php
// assuming $db is properly configured and connected ADODB database object
$rs = $db->Execute("SELECT ...");
while (!$rs->EOF) {
print $rs->fields['fieldname'];
// further processing of row
$rs->MoveNext(); // move to the next row
}
【讨论】:
检查您是否正在使用 DISTINCT 和 GROUP BY 语句,显然“由于比较可变长度字符串而不是固定长度字符串的开销,在使用 DISTINCT 和 GROUP BY 语句时文本字段上会发生截断”。
【讨论】: