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