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 함수를 사용해 볼 수 있습니다.