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. 것으로 나타납니다 사이에, 우리는 다음과 같은 오류가 그것은 2의 거듭 제곱 경계 (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 프로파일 러를 실행하여 문제가있는 호출을 추적 해 보셨습니까? –
나는 mssql 드라이버에서 같은 문제가 있으며'mssql.textlimit = 1052272'와'mssql.textsize = 1052272'로 해결된다. 비록 sqlsrv 드라이버에 해당하는 것을 찾을 수 없습니다. – danielson317