1
我正在使用Microsoft的sqlsrv PHP驅動程序(在Windows 2003服務器上)將大量文本寫入text
列。字符串數據,在SQLSRV PHP驅動程序中的右截斷
有一個奇怪的「甜甜圈洞」錯誤,如果文本的長度相當小,它會被成功保存,如果文本足夠大,它也會成功保存。在此期間,我們得到以下錯誤:
SQLSTATE: 22001
code: 0
message: [Microsoft][SQL Server Native Client 10.0]String data, right truncation
下限(觸發錯誤)似乎是圍繞4011字符,上限8024中有可能會推動數據庫中的其他一些列它通過兩個冪的邊界(4096和8192)。
無論正在運行的SQL如何,都會發生這種情況。作爲測試的情況下,我們運行了以下內容:
$connectionInfo = array("UID" => "REDACTED", "PWD" => "REDACTED", "Database"=>"REDACTED", "CharacterSet" => "UTF-8");
$conn = sqlsrv_connect("SQLSERVER", $connectionInfo);
$stmt = sqlsrv_prepare($conn, "SELECT LEN(?)", array(&$large_string));
if (!sqlsrv_execute($stmt))
print_r(sqlsrv_errors());
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
我們發現,表現出同樣的行爲另一個表(使用varchar(max)
列)。
編輯:使用帶有varchar列的UTF-8編碼時會出現這種情況,但在使用標準編碼時不會出現這種情況。
您是否嘗試過運行SQL Server Profiler來跟蹤有問題的調用? – 2010-12-07 01:06:00