我正在使用PHP在SQLServer 2008中存储数据。
数据类型为nVarChar(Max)。
非常大的字符串发布并正确保存,但是当我在odbc_fetch_into时,超过4104个字符的值会在数组中放置一个空值。
我可以选择left([Note],4104)并返回左边的4101个字符,但是当我选择left([Note],4105)时,它会将null放入数组中。
我需要对PHP数组做些什么来让它接受更大的值吗? 或者可能单独获取字段?
$SQL = "SELECT left([Note],4104) FROM [myTable] WHERE [myKey] = myVariable"; //Works for all strings!
//$SQL = "SELECT [Note] FROM [myTable] WHERE [myKey] = myVariable"; //Works for strings <= 4104 characters
$row = array();
$stuff = array();
$prep = odbc_prepare($conn, $SQL);
$ret = @odbc_execute($prep);
while (odbc_fetch_into($prep,$row)) {
array_push($stuff,$row);
}
echo json_encode($stuff);
更新:我刚刚在$ stuff上做了一个var_dump,并且发现它在字符#4104之后有很多垃圾。在Firefox中,有许多菱形/问号字符,以及PHP源代码的残余和之前返回的结果。
答案 0 :(得分:0)
好的,无论如何我都有部分答案......
PHP.ini中有一个名为odbc.defaultlrl的参数。该值将限制odbc字段的返回大小。
还不确定为什么最后所有的gabage都在那里。当我将字段值从nvarchar(max)更改为varchar(max)或文本时,垃圾消失了但是大小限制仍然存在。
我的php.ini设置为4096 - 不确定我是如何获得4104字节的。