psql에서 접속을 해서
select * from dblink('hostaddr=127.0.0.1 port=xxxx dbname=xxxxxxuser=xxxxxx password=xxxxxx','select aaa from table limit 1');
as t1(aaa varchar(20))
이렇게 했다고 했을 때 aaa의 결과값이 한글일 때
invalid UTF-8 byte sequence detected near byte 0xc1
라는 에러가 납니다. (물론 한글이 아닐 때는 잘 나옵니다.)
그런데 그냥 select aaa from table limit 1 ;
이렇게 하면 결과값이 잘 나옵니다.
아무래도 dblink를 했을 때 결과값이 UHC로 와서 그걸 서버가 해석을 못해서 나온 것 같은데요.
이걸 해결하려면 postgresql.conf파일의
client_encoding=UNICODE
이렇게 변경해야하는것인지, 아니면 다른 방법이 있는지가 궁금하네요.
참고로, 저것을 수행했을 때의
show server_encoding : UTF-8
show client_encoding : UHC
입니다.
그리고 postgresql.conf파일의 client_encoding옵션이 UNICODE일 때와 각 나라별 언어셋(UHC, GB18030...)일때의 차이점이
무엇인지가 궁금합니다.
지금까지 클라이언트 프로그램을 만들 때 PQsetClientEncoding함수에서 지정해주는 인코딩 옵션과
postgresql.conf파일의 client_encoding옵션이 같아야 하는줄 알았는데
저것을 UNICODE로 지정해주고 위의 함수에서 UHC로 지정해주어도 문제가 없는것 같았습니다.
그러면 postgresql.conf에서 지정해주는 client_encoding옵션은 단지 psql에서만 사용하는 옵션인지,
클라이언트를 만들 때 각기 옵션을 따로 지정해주면 postgresql.conf의 client_encoding옵션은 무시가 되는것인지 궁금하네요
글이 좀 장황해진것 같은데 아사는 분은 답변 부탁드리겠습니다.
|