2014-04-14 2 views
1

우리 데이터베이스는 Intersystems 캐시입니다.이 하나의 테이블에서 PHP를 통해 값을 가져 오려고합니다. 나는 그 값들을 얻을 수 있었지만 어떤 값들은 불완전하고 결국에는 상징을 가지고있다.캐시 ODBC 문자

이 .. 그것을 php99 ¥ 7 "\ ß|

다음

내가 .. 크리스탈 리포트를 통해 어떤 문자 값을 얻을려고 노력하지만 여전히 긴 값이 불완전, 내가 필드 유형을 보거나을 문자입니다 String [30]은 30 문자로 제한되어 있다고 생각했습니다. 그러나 VB 응용 프로그램에서 볼 때 30 자 이상을 표시합니다.

예 :

php = "The quick brown fox jumps overphp99¥7“\ߦ" 
crystal reports = "The quick brown fox jumps over" 
VB application = "The quick brown fox jumps over the lazy dog" 

나는 내가 정말 그 실행 SQL 무엇을 볼 수없는 VB의 소스를 가지고 있지 않습니다.

누구나 나를 도울 수 있습니까? ...?

+0

'데이터베이스 ---> SQL 쿼리 표시'옵션을 사용하여 sql in crystal을 확인할 수 있습니다. – Siva

+0

옙은 이미 시도했지만 동일하지만 실제로는 크리스탈에서도 불완전합니다. – Cyr

+0

죄송합니다. Vb의 한 부분으로 Crystal에 대한 전문 지식을 가지고 있음 – Siva

답변

1

caché에서 전역 변수를 직접 사용할 때 테이블의 열 길이 제한이 확인되지 않습니다. 이렇게하면 열의 최대 길이보다 긴 정보를 행에 넣을 수 있습니다.

반면에 ODBC 및 아마도 크리스탈 보고서 (나는 그들이 백그라운드에서 ODBC를 사용한다고 생각합니다)는 테이블의 정의에서 열 길이를 기준으로합니다.

이 경우의 쉬운 해결책은 해당 컬럼의 길이를 올리는 것입니다. 이것은 크리스탈 리포트와 PHP 모두 올바른 값을 반환하게됩니다. 문제는 그것이 당신의 문제를 해결할 수 있는지입니다. 아마도 열의 최대 길이가 30 자가되기를 원할 것입니다. 이 경우 경량 검사는 전역에 직접 액세스하는 VB 응용 프로그램에 내장되어야합니다.

0

이 버그도 발생했습니다. 문제는 PDO_ODBC 유니 코드 변환으로 인해 발생하며 PHP 소스를 패치하여 해결했습니다.

파일 : 내선/pdo_odbc/odbc_stmt.c 교체 라인 (내 설치시 # 631)

S->cols[colno].datalen+1, &S->cols[colno].fetched_len);

나는이 수정이 좋지 않은 것을 알고

S->cols[colno].datalen*2+1, &S->cols[colno].fetched_len);

와 ,하지만 그것은 내 경우에 잘 작동합니다.