자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi dbExpress > FireDAC 마이그레이션 관련 문의
2016.09.19 13:55
본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
dbExpress 를 FireDAC로 마이그레이션 하고 있습니다.
Database : Firebird 2.5
FDConnection 의 CharacterSet=csNONE 으로 접속하고 있습니다.
한글 조건에 의한 검색이 에러가 발생하는데 좀 특이합니다.
한글 1자를 조건으로 SELECT하면 항상 에러가 발생합니다.
/* 에러발생 SQL */
select MM_CODE, MM_REMARK
from MST_IO_MASTER
where (MM_REMARK CONTAINING '수')
order by MM_CODE
/* 에러메세지 */
ERROR:Dynamic SQL Error
SQL error code = @1
Column unknown @1 At line @1, column @2
그런데 아래와 같이 조건값을 한글 2자 또는 영문1자를 지정하면 정상적으로 SELECT 됩니다.
/* 정상실행 SQL */
select MM_CODE, MM_REMARK
from MST_IO_MASTER
where (MM_REMARK CONTAINING '수정')
order by MM_CODE
/* 정상실행 SQL */
select MM_CODE, MM_REMARK
from MST_IO_MASTER
where (MM_REMARK CONTAINING 'a')
order by MM_CODE
또 아래와 같이 order by 절을 포함하지 않아도 정상 SELECT 됩니다.
/* 정상실행 SQL */
select MM_CODE, MM_REMARK
from MST_IO_MASTER
where (MM_REMARK CONTAINING '수')
SQL 문장 오류는 아닌지라 FireDAC SQL 전처리 과정에서
한글관련해서 에러가 발생하는것이 아닌가 생각되는데요.
(FireDAC Explorer 에서 직접 SQL을 실행시켜도 결과는 동일합니다)
FireDAC 마이그레이션 관련해서 상기와 같은 한글 이슈가 발생한 사례가 있는지요?
해결책이 있다면 도움 부탁드립니다.
댓글 3
-
관리자
2016.09.19 16:17
-
allright
2016.09.19 18:05
2003년 Firebird 1.X 부터 사용하던 데이터베이스라서 저장된 데이터가 특별히 Charaterset 이 지정되지 않았습니다.
파라미터 형식으로 사용하면 에러가 나지 않으나 SELECT 결과목록이 바르지 않구요.
다양한 Charaterset 으로 접속하도록 FireDAC Explorer Connection 속성을 바꿔가며 직접 SQL을 테스트해도
에러가 나거나 에러가 나지 않으면 결과값이 바르지 않습니다.
(UTF-8, UNICODE_FSS 등은 에러가 나지 않으나 Charaterset 문제로 SELECT 결과값이 바르지 않습니다)
결국 dbExpress 를 그대로 유지하는 것을 검토하고 있으나
혹여 다른참조할 만한 추가 정보가 있다면 부탁드립니다.
-
험프리
2016.09.20 14:41
저도 정확한 정보는 아니지만, 아래 링크의 댓글과 같이 MapRules을 설정해보시면 어떨까요?
http://tech.devgear.co.kr/delphi_qna/423335
FireDAC에서 쿼리에 한글이 들어간 경우 AnsiString과 WideString간 타입이 맞지 않은 경우 오류가 발생하거나, 올바르지 않은 결과가 나오는 경우가 있습니다.
테스트 후 결과 알려주시면 감사하겠습니다.
Delphi dbExpress > FireDAC 마이그레이션 관련 문의
2016.09.19 13:55
본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
dbExpress 를 FireDAC로 마이그레이션 하고 있습니다.
Database : Firebird 2.5
FDConnection 의 CharacterSet=csNONE 으로 접속하고 있습니다.
한글 조건에 의한 검색이 에러가 발생하는데 좀 특이합니다.
한글 1자를 조건으로 SELECT하면 항상 에러가 발생합니다.
/* 에러발생 SQL */
select MM_CODE, MM_REMARK
from MST_IO_MASTER
where (MM_REMARK CONTAINING '수')
order by MM_CODE
/* 에러메세지 */
ERROR:Dynamic SQL Error
SQL error code = @1
Column unknown @1 At line @1, column @2
그런데 아래와 같이 조건값을 한글 2자 또는 영문1자를 지정하면 정상적으로 SELECT 됩니다.
/* 정상실행 SQL */
select MM_CODE, MM_REMARK
from MST_IO_MASTER
where (MM_REMARK CONTAINING '수정')
order by MM_CODE
/* 정상실행 SQL */
select MM_CODE, MM_REMARK
from MST_IO_MASTER
where (MM_REMARK CONTAINING 'a')
order by MM_CODE
또 아래와 같이 order by 절을 포함하지 않아도 정상 SELECT 됩니다.
/* 정상실행 SQL */
select MM_CODE, MM_REMARK
from MST_IO_MASTER
where (MM_REMARK CONTAINING '수')
SQL 문장 오류는 아닌지라 FireDAC SQL 전처리 과정에서
한글관련해서 에러가 발생하는것이 아닌가 생각되는데요.
(FireDAC Explorer 에서 직접 SQL을 실행시켜도 결과는 동일합니다)
FireDAC 마이그레이션 관련해서 상기와 같은 한글 이슈가 발생한 사례가 있는지요?
해결책이 있다면 도움 부탁드립니다.
댓글 3
-
관리자
2016.09.19 16:17
-
allright
2016.09.19 18:05
2003년 Firebird 1.X 부터 사용하던 데이터베이스라서 저장된 데이터가 특별히 Charaterset 이 지정되지 않았습니다.
파라미터 형식으로 사용하면 에러가 나지 않으나 SELECT 결과목록이 바르지 않구요.다양한 Charaterset 으로 접속하도록 FireDAC Explorer Connection 속성을 바꿔가며 직접 SQL을 테스트해도
에러가 나거나 에러가 나지 않으면 결과값이 바르지 않습니다.
(UTF-8, UNICODE_FSS 등은 에러가 나지 않으나 Charaterset 문제로 SELECT 결과값이 바르지 않습니다)
결국 dbExpress 를 그대로 유지하는 것을 검토하고 있으나
혹여 다른참조할 만한 추가 정보가 있다면 부탁드립니다.
-
험프리
2016.09.20 14:41
저도 정확한 정보는 아니지만, 아래 링크의 댓글과 같이 MapRules을 설정해보시면 어떨까요?
http://tech.devgear.co.kr/delphi_qna/423335
FireDAC에서 쿼리에 한글이 들어간 경우 AnsiString과 WideString간 타입이 맞지 않은 경우 오류가 발생하거나, 올바르지 않은 결과가 나오는 경우가 있습니다.
테스트 후 결과 알려주시면 감사하겠습니다.
통상적으로 FDConnection CharaterSet =UTF8,UNICODE_FSS 등으로 지정하고 사용합니다.
그래도 쿼리가 수행이 안된다면 쿼리의 파라미터 필드를 디폴트인 Srting 타입에서 WideString으로 변경하시어 실행하여 보십시오.