>  기사  >  백엔드 개발  >  MSSQL 데이터베이스의 텍스트 유형 필드가 PHP에서 잘리는 이유에 대한 솔루션

MSSQL 데이터베이스의 텍스트 유형 필드가 PHP에서 잘리는 이유에 대한 솔루션

巴扎黑
巴扎黑원래의
2016-11-10 10:07:401398검색

PHP에서는 MSSQL 데이터베이스를 사용했는데, 데이터베이스에서 Text형 필드를 사용하는 일이 발생하여 문제가 발생했습니다. 데이터베이스에서 데이터를 쿼리할 때마다 설명할 수 없을 정도로 항상 잘립니다. 처음에는 제가 사용한 PHP 프레임워크에 문자열 길이에 제한이 있다고 생각했습니다. 나중에 제출할 때 이것이 어리석은 생각이라는 것을 알았습니다. 데이터를 가지고 있으면 문자열 내용을 모두 데이터베이스에 제출할 수 있는데 이런 현상은 읽을 때만 발생하기 때문에 비슷한 문제가 있는지 온라인으로 검색해 보았습니다. 운이 좋게도 첫 번째 검색에서 해결책을 찾았기 때문에 저 자신과 대부분의 PHP 애호가들의 가끔 필요에 따라 제 블로그에 다시 게시하기로 결정했습니다.
다음과 같은 두 가지 해결 방법이 있습니다.
1. 이를 달성하기 위해 php.ini를 수정합니다.
php.ini를 열면 mssql.textsize 및 mssql.textlimit의 두 가지 옵션이 표시됩니다.
; 유효한 범위는 0 - 2147483647. 기본값 = 4096.
;mssql.textlimit = 4096

; 유효한 범위는 0 - 2147483647. 기본값 = 4096.
;mssql.textsize = 4096

기본 구성이 4096바이트인데 4K로 잘리는 경우가 많다는 것을 알 수 있습니다. 적당한 크기로 변경하고 앞에 있는 세미콜론을 제거한 다음 저장하고 웹 서버를 다시 시작하세요.

위의 두 가지 옵션에서 범위는 0 - 2147483647바이트임을 알 수 있습니다.

if(MS_SQL_G(textlimit)!=-1){
sprintf(buffer,"%li",MS_SQL_G(textlimit));
if(DBSETOPT(mssql.link,DBTEXTLIMIT,buffer)==FAIL){
efree(hashed_details);
dbfreelogin(mssql.login);
RETURN_FALSE;
}
}
if(MS_SQL_G(textsize)!=-1){
sprintf(buffer,"SETTEXTSIZE%li",MS_SQL_G(textsize));
dbcmd(mssql.link,buffer);
dbsqlexec(mssql.link);
dbresults(mssql.link);
}

2. PHP에서 SELECT 쿼리를 실행하기 전에 SET TEXTSIZE를 실행합니다.

mssql_query("SETTEXTSIZE65536");

PHP 소스 코드에서 볼 수 있듯이 위의 실제로 SET TEXTSIZE도 실행됩니다.

위의 방법으로도 문제가 해결되지 않으면 쿼리문에서 CAST 함수를 사용해 볼 수 있습니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.