我知道这是一篇旧帖子,但我也刚刚遇到过这个问题,情况非常复杂,需要一个完整的答案。
您的数据有几个地方可能会被截断。
ODBC 长读长度
ODBC 对于大列有默认的长读取长度 (lrl)。通过执行以下操作之一,确保您的 fetch 的 lrl 足够大:
将默认值设置为php.ini
更大的事情,比如odbc.defaultlrl = 10000
.
Or use ini_set("odbc.defaultlrl", "10000");
在您的代码中设置它before建立您的联系。
Or use odbc_longreadlen($result, "10000");
在获取结果之前将其设置在代码中。
FreeTDS
如果您使用 FreeTDS 从 Linux 环境连接到 MS SQL 数据库,则有一个text size
您设置的限制freetds.conf
文件。在这里仔细检查您的配置是否足够大。
php_mssql
正如@Anujan的回答一样,有些人(我认为不是OP)可能正在使用php_mssql
建立他们的联系,在这种情况下,您要确保您的mssql.textlimit
and mssql.textsize
足够大,或者通过将它们设置在您的php.ini
或者在您的代码中添加以下内容(在建立连接之前):
ini_set('mssql.textlimit', "10000");
ini_set('mssql.textsize', "10000");
SQL服务器
SQL Server 本身设置了默认文本大小,您可能需要显式增大它(特别是在不使用 ODBC 的情况下)php_mssql
以及上面给出的配置)。在这种情况下,请将以下内容添加到查询字符串的开头:
SET TEXTSIZE 10000
SELECT big_ol_column FROM wherever
...
请注意,一些更改(例如php.ini
)可能需要您重新加载/重启 PHP/Nginx/Apache 才能生效。
通过查看截断的结果大小,您应该能够找出其中哪一个限制了您的结果。对我来说,所有内容都会返回 4096 个字符长,所以我新设置的限制就是这个长度。
另请注意,上例中的“10000”并不是一个神奇的数字——请根据您的需要进行调整。