본문 바로가기
DogFoot/Delphi

[FireDAC] MySQL/mariaDB 서버 오류 메시지 한글 깨짐

by 크림슨킹 2021. 4. 16.

MySQL이나 mariaDB 내 테이블의 인코딩이 utf8 또는 utf8mb로 되어있는 경우

varchar나 text 컬럼의 데이터 in/out은 Query나 Stored Procedure의

각 컬럼 파라미터 설정에서 데이터 형식을 지정해 주기만 하면된다.

영문만 들어가는 컬럼은 일반 string/memo로 하면되고

한글이 들어가는 컬럼은... 

 

varchar는 ftWideString으로

text는 ftWideMemo으로

 

ex)  Params.CreateParam(ftWideString, 'p_title',      ptInput); 
      Params.CreateParam(ftWideMemo,   'p_contents',   ptInput); 

 

데이터셋을 받는 경우에도 Wide로 받으면 되는데

varchar/text 모두 AsWideString으로 받으면 된다.

 

ex) FieldByName('Contents').AsWideString;

 

그러나 이렇게 테이블 데이터의 in/out이 아니라

database 처리 중에 오류가 발생하여 오류메시지를 받는 경우는 조금 다르다.

해당 메시지는 Query나 Stored Procedure에서 받는 것이 아니라

Database Connection(Session)에서 처리된다.

 

이 경우 기본적으로 database 서버 설정값을 따라가는데

한글이 깨져서 넘어오는 경우 서버 설정을 바꾸면 될 듯하지만 

어떤 부분의 설정 때문인지 파악이 쉽지않다

(Session/Grobal 설정들이 모두 utf8/utf8mb인데도 문제가 발생한다.).

 

서버 설정의 여의치 않은 경우

로컬의 database connnection의 charset을 다음과 같이 변경해 주도록 하자.

 

FDConnection.Params.CharacterSet := csEucKr;

 

이제 오류메시지가 한글로 정상적으로 넘어올 것이다.

(안되면 CharacterSet을 마구 바꿔볼 것! ㅎ)

 

끝!

댓글