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을 마구 바꿔볼 것! ㅎ)
끝!
'DogFoot > Delphi' 카테고리의 다른 글
[Delphi] 다중 예외 처리: 다중 Exception 객체 처리 (0) | 2022.12.22 |
---|---|
[IdFTP] Indy FTP, Connection reset by peer: 10054 (0) | 2022.01.20 |
[Delphi] 중첩 예외처리(try...except) (0) | 2021.04.23 |
[FireDAC] MySQL Commands out of sync; you can't run this command now (0) | 2021.04.02 |
[Delphi] 스피드버튼을 토글버튼으로 사용하기 (0) | 2018.12.27 |
댓글