델파이 2010 버전에서 델파이가 Unitcode를 지원한다 하여 Unicode 지원 XeosLib 6.5 등의 버전을 이용하여 역시 같은 방법으로 codepage=euckr로 지정하여 사용 하였다.
물론 Mysql도 unicode를 지원 할 수 있는 5.1 버전으로 바꾸었다.
쿤자 코드 체계를 일원화 하기 위하여 FrontMySql 5.0 버전을 이용하여 디비의 문자 속성을 전부 utf8 로 바꾼 상태에서 데이터를 ZeosLib를 써서 데이터를 가져 오면 부분적으로 한글이 깨어져 읽혀 지더군요. 해서 특정 테이블만 euckr 로 바꾸어서 사용하고 있었다.
ZeosLib7 버전을 다운 받아 설치하여, 예전에 운용하던 프로그램에 적용 하였다,
데이터 읽어오거나 한글 깨어 짐은 없으나, 문자의 길이 쪽에 문제가 발생하여 숫자나 기호를 잘 불러오지 못하는 현상과 ParamByName에 오류가 발생하여 정리하여 봤습니다.
MtSql 서버측 크라이언트측
euckr euckr : 숫자/기호 오류, ParamByName('').Asstring 은 정상
euckr utf8 : 정상, ParamByName('').Asstring 오류
utf8 euckr : 숫자/기호 오류, ParamByName('').Asstring 은 정상
utf8 utf8 : 정상, ParamByName('').Asstring 오류 (주1)
주1 방법에서 해결 방법을 찾다가
ZQuery1.ParamByName('ijijum').AsString := '북광주' 를
ZQuery1.ParamByName('ijijum').AsString := '북광주%' 으로 바꾸어 해결하였으나,
뭔가 찜찜하더군요.
다른 방법을 찾아보다가
ZQuery1.SQL.Text:= 'select * from cmaster where (ijijum like :ijijum)';
ZQuery1.ParamByName('ijijum').AsString := edit1.text;
을
ZQuery1.ParamByName('ijijum').AsAnsiString := edit1.text;
으로 바꾸어서 해결하였습니다.
ZeosLib의 AsString 에서 문제가 있는 것 처럼 보이더군요.
위 방법은 뭐가 편법인것 같아서 다른 방법을 찾아보다가
ZQuery1.SQL.Text:= 'select * from carecallmaster where (ijijum like :ijijum)';
//ZQuery1.ParamByName('ijijum').AsString := edit1.text;
ZQuery1.Params.ParamByName('ijijum').DataType:= ftString;
ZQuery1.Params.ParamByName('ijijum').Value:= Edit1.Text;
방법을 사용하였더니 정상이더군요, 참고하세요.
Zconnection 에 보면 PrepareSQL 이라는 옵션이 있습니다.
이게 디폴트가 False 인데 이걸 True로 바꾸어 주니 AsString 이 정상으로 작동됩니다.
(ㅎㅎㅎ 이것 때문에 엄청 고민 많이 했는데.........)
데이터
댓글 없음:
댓글 쓰기