2012-06-05 75 views
0

我用mssql_query()存儲一個長文本;爲什麼TEXT列只返回4096字節?

並使用名稱爲'text'的數據類型的字段。

我試着用不同的長字符串通過使用str_repeat(),頁面花費很長時間,但最終提交結果。 但是,當我檢索結果時,我只有4096字節無關緊要。 我試圖用管理工作室檢索價值,並得到相同的結果。

它在我看來就像一個存儲問題。請建議一些事情......我很困惑。

這些誰問編輯,這是我使用的是什麼:

function sql_escape($sql) { 
     /* De MagicQuotes */ 
    $fix_str  = stripslashes($sql); 
    $fix_str = str_replace("'","''",$sql); 
    $fix_str  = str_replace("\0","[NULL]",$fix_str); 
    return "'".$fix_str."'"; 
} 
$query=mssql_query('update prod_cat set htmlbottom='.sql_escape(str_repeat('\'choose_cat ', 122000)). 
    ' where ID=1' ); 

$query=mssql_query('select htmlbottom from prod_cat where ID=1'); 
$a=mssql_fetch_assoc($query); 
echo strlen($a['htmlbottom']); 
+0

你可以顯示* exact *表定義和你用來獲取數據的代碼嗎? –

+3

停止使用TEXT,使用VARCHAR(MAX)(或可能是NVARCHAR(MAX))。 LEN(列)和DATALENGTH(列)返回什麼?你還可以顯示將數據添加到表格的代碼嗎?使用Management Studio來選擇數據不是有效的測試,因爲默認情況下,輸出被截斷(並且可以配置爲更高的數量,但不足以顯示TEXT列的全部內容)。 –

+0

它返回1464000 – Anonymous

回答

1

微軟的PHP驅動程序(僅供參考):http://www.microsoft.com/en-us/download/details.aspx?id=20098

但是,如果你不希望(或不能)更改驅動程序,從this site

You need to increase the maximum size of a text column to be returned from 
SQL Server by PHP. You can do this with a simple SQL query: 
    SET TEXTSIZE 2147483647 

Which you can run with the following PHP (best run just after you make a 
connection). 
    mssql_query("SET TEXTSIZE 2147483647"); 

A better way to work around the issue is to change the "textlimit" and 
"textsize" settings within php.ini, like so: 
    mssql.textlimit = 2147483647 
    mssql.textsize = 2147483647 

你MSSQL驅動程序截斷文本。如果您無法更改數據類型,驅動程序等,則應該爲您解決問題。

+1

你也可以在[freetds.conf](http://www.freetds .org/userguide/freetdsconf.htm)文件,由驅動程序讀取。 – sesser

+0

謝謝!這解決了它,我設置在PHP ini - 不認爲這是默認限制。 – Anonymous

相關問題