블루베리소르베

[PostgreSQL] UTF-8 인코딩 오류 해결하기 본문

DATA/PostgreSQL

[PostgreSQL] UTF-8 인코딩 오류 해결하기

블루베리소르베 2021. 5. 19. 00:15

테이블을 조회하려는데 이런 녀석을 만났다.

ERROR:  invalid byte sequence for encoding "UTF8": 0xe3 0x2a 0x20

번역하자면 인코딩에서 허가되지 않은 바이트 시퀀스가 발견되었다 정도다.

도대체 어떤 게 문제인지 한참을 고민했다.

테이블을 만들고, 다른 롤에 select 권한을 주어 테이블 내부의 데이터를 조회하였더니 이런 에러가 나를 반겨주었다.

문제는 테이블을 만든 롤에서는 조회에 전혀 오류가 발생하지 않는다는 것.

 

문제의 해결은 의외로 쉽게 되었다.

구글신의 은총을 받은 폭풍 검색으로 찾은 해결방법은 심플했다.

export PGCLIENTENCODING='uhc'

PG를 종료하고 커멘드창에 입력한 한 줄로 모든 것이 해결되었다.

환경변수에 PGCLIENTENCODING을 명시해주었다. 

하지만 정확한 문제가 무엇인지 알지 못하니 찜찜했다.

 

조금 더 찾아 본 결과, 인코딩 당시 테이블에 들어있는 내용 중 UTF-8에는 없는 문자가 포함되어 있다는 것이 문제로 보인다.

분명 데이터를 넣은적이 없는데...

 

추측하건대, 나와 같은 경우에는 정보가 없는 공백을 기록하는 과정에서는 잘 기록되었지만 롤을 변경하여 쿼리를 처리하는 과정에서 시스템의 인코딩과 클라이언트 인코딩이 충돌하며 에러가 발생하는 것 같다. 그걸 UHC로 변경해주니 오류가 수정된 것이 아닐까 싶다.  

쿼리를 입력할 때도 한글이면 깨져 보이기도 하였으니, 가능성이 없지는 않은 듯.

하지만, 어디까지나 지극히 개인적인 추측일 뿐.

 

오늘은 PG의 기능적인 문제이지 내 잘못은 아닌 것 같다는 결론을 조심스럽게 내려봐야지.