database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 8916 게시물 읽기
No. 8916
한글 관련 문제
작성자
이효광(pglovepg)
작성일
2011-12-21 20:19
조회수
15,410

 안녕하세요

db 한글 관련하여 도저히 답을 찾지 못해 결국 글을 남기게 되었습니다;;

http://database.sarang.net/?inc=read&aid=5129&criteria=pgsql&subcrit=&id=&limit=20&keyword=mydb2&page=1

이것도 봤고, 매뉴얼도 봤고 한데..해결이 안되네요..

서버에 그냥 postgresql 만 설치한게 아니라 alfresco 라는 오픈 소스를 설치하니까 postgres 도 설치 됐습니다. (그래서 기본 폴더도 다르고 합니다만..)

그래서 그런지 기본적으로 en_US.UTF-8 로 설정이 되있더군요..show server_encoding 하면 UTF8 이라고 나옵니다..client 도 마찬가지구요..

postgres.conf 안에 euc-kr / utf-8 , i18n 에도 둘다 해놓고 번갈아 셋팅하고 다 해봤습니다.

문제는 psql 로 들어가서 직접 create 하고 insert 하니까 한글이 나왔는데

html 에서 한글을 입력받아서 jsp 로 넘기고 jdbc 연결해서 insert 하니까 다시 깨지네요....

도무지 모르겠습니다..ㅠㅠ 

그래서 initdb 써서 아예 euckr 로 새로 생성해볼까 했는데 initdb까진 어케 했는데 createdb 하니까 또 안되네요..

/opt/alfresco-4.0.b/postgresql/bin/createdb -E euc-kr addr 쳤더니
 
createdb.bin: database creation failed: ERROR:  encoding EUC_KR does not match locale en_US.UTF-8
DETAIL:  The chosen LC_CTYPE setting requires encoding UTF8.
 
이럽니다..
문제가 뭔지를 모르겠네요ㅠ
도움 좀 부탁드립니다.

이 글에 대한 댓글이 총 7건 있습니다.

 jdbc로 연결해서, 

show server_encoding

show client_encoding

 

두 SQL을 실행해서 그 결과를 웹페이지에서 찍어보세요.

웹페이지의 encoding도 살펴보시고, 

 

server_encoding, client_encoding, 웹페이지 charset 모두가 utf8이라면, 한글을 쓰는데, 문제가 없겠죠. 

 

문제는 한국어 환경을 제대로 쓰려면,

http://database.sarang.net/?inc=read&aid=5845&criteria=pgsql&subcrit=&id=&limit=20&keyword=collate&page=1

문서에서 처럼 initdb할 때의 lc_collate 값도 기본 설치와 약간 다릅니다. 

참고하세요.

 

김상기(ioseph)님이 2011-12-22 09:45에 작성한 댓글입니다.

안녕하세요 답변 감사드립니다!!!

확인해본결과 서버에서 psql 로 show server, client 해보면 둘다 UTF8 이라고 나오는데

말씀해주신대로 웹에 찍어본 결과 server 는 UFT8 로 나오고 client 는 UNICODE 라고 나오네요;;

이게 안맞아서 제대로 안됐던걸까요? 어떻게 맞춰야할지..;;

(뭔가 이상해서 다시 찾아보니 같은 의미인거 같은데요-ㅅ-;;; 정상인건가요?;;)

html, jsp 파일의 charset 도 모두 UTF-8 로 입력한 상태입니다..

다음은 설정파일들입니다..ㅠ

괜찮으시면 다시 조언 좀 부탁드리겠습니다ㅠ

client_encoding = UTF-8 # actually, defaults to database encoding
# These settings are initialized by initdb -- they might be changed
 
lc_messages = 'ko_KR.UTF-8'            # locale for system error message strings 
lc_monetary = 'ko_KR.UTF-8'            # locale for monetary formatting 
lc_numeric = 'ko_KR.UTF-8'             # locale for number formatting 
lc_time = 'ko_KR.UTF-8' 
 
LANG="ko_KR.UTF-8"
SUPPPORTED="ko_KR.eucKR:ko_KR.UTF-8:ko_KR:ko"
SYSFONT="lat0-sun16" 
SYSFONTACM="8859-15"
SUPPPORTED="ko_KR.UTF-8:ko_KR.eucKR:ko_KR:ko"
SYSFONT="lat0-sun16" 
SYSFONTACM="8859-15"

아 그리고 위에 말씀드렸다시피 다른 오픈소스를 설치하면서 postgres 도 같이 자동설치가 된거라

initdb 를 따로 실행하지 않았습니다..결국 하려면 알려주신 링크대로 새로 설치해야하는걸까요?;;;

이효광(pglovepg)님이 2011-12-22 10:54에 작성한 댓글입니다.
이 댓글은 2011-12-22 11:03에 마지막으로 수정되었습니다.

 흠..모두 utf8 로 셋팅을 해놓으면 서버에서 psql 로 create table 하고 insert 해서 한글 넣으면 

address=# insert into addrlist values('아','하','하');
ERROR:  invalid byte sequence for encoding "UTF8": 0xbe
 
이래 나오네요..
그래서 클라이언트 인코딩을 uhc 로 바꿔주니 직접들어가는건 됩니다..
 
address=# set client_encoding='uhc';
SET
address=# insert into addrlist values('아','하','하');
INSERT 0 1
address=# select * from addrlist;
 user1 | place1 | floor1
-------+--------+--------
 아    | 하     | 하
(1 row)
 
이것도 좀 이상하네요ㅠㅠ

이효광(pglovepg)님이 2011-12-22 11:44에 작성한 댓글입니다.

 그 부분은 psql 실행할 때의 터미날 환경에 대한 부분입니다. 

터미날 환경이 uhc (cp949, ksc5601) 환경이라서 그렇게 처리되는 듯합니다.

--------------

 

client_encoding 값의 결과가 unicode로 나올 수도 있나요?

set client_encoding to UTF8

 명령을 connection 다음에 한번 실행해 주면 되면됩니다. 

 

------------------

 

9.1.x 대 쓴다면, 아마 database를 만들때도 lg_collate 값을 지정할 수 있는 것으로 알고 있습니다. 

그렇다면 굳이 initdb 작업이 없어도 될 것 같네요.

 

김상기(ioseph)님이 2011-12-22 13:31에 작성한 댓글입니다.

  client_encoding 결과는 connection 다음에 set 한 이후에도

웹에서는 계속 unicod 로 나오네요;;

postgres 는 9.0.2 버전이네요..

아무래도 9.1 이상으로 바꿔야하는건지..

답이 없네요..ㅠ 

암튼 감사드립니다ㅠ

이효광(pglovepg)님이 2011-12-22 14:03에 작성한 댓글입니다.

 아 해결했습니다. 원인은 파악하지 못했지만..ㅠ

게시물 다시한번 검색해보니 웹을 통과할때 변환해줘야 한다는 걸 보고 시도해봤습니다.

http://database.sarang.net/?inc=read&aid=3065&criteria=pgsql&subcrit=&id=54&limit=20&keyword=%C7%D1%B1%DB&page=17

이 링크인데요..

입력시 target = new String( source.getBytes("UTF-8"), "8859_1" );

출력시 target = new String( source.getBytes("8859_1"), "UTF-8" ); 

로 해봤는데 안되길래 또 이것저것 시도해봤습니다..그랬더니 엉뚱하게도;;

입력시 target = new String( source.getBytes("UTF-8"), "UTF-8" );

출력시 target = new String( source.getBytes("8859_1"), "UTF-8" ); 

 

이렇게 잘못썼는데 갑자기 되네요-ㅅ-;;;;;

PUTTY 로 들어가면 깨져서 보이긴 합니다만..;; 웹에서는 정상적으로 출력되네요..허허..

아햏햏도 잘 나옵니다;; 대체 뭐가 뭔지 모르겠지만 일단 되서 기분은 좋네요;;;

감사합니다...ㅠㅠ 

(기초부터 안배우고 필요한 부분만 찾아서 해결하다보니 막히는게 한두개가 아니네요;; )

이효광(pglovepg)님이 2011-12-22 15:14에 작성한 댓글입니다.

 9.0.x 버전도 create database 할 때, collate 값을 지정할 수 있네요. 

그냥 새 데이터베이스 만들어서 쓰면 될 것 같네요.

 

김상기(ioseph)님이 2011-12-22 18:09에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
8920컬럼 타입 변환 관련 질문입니다. [1]
이종복
2011-12-27
8330
8919index를 이용한 정렬 [6]
facy
2011-12-26
12125
8917Numeric 관련 질문드립니다. [1]
이종복
2011-12-26
8439
8916한글 관련 문제 [7]
이효광
2011-12-21
15410
8915DB와 Tomcat 운영 문의 사항 [2]
박병훈
2011-12-21
9149
8914PostgreSQL이 11.12.05에 릴리즈되었는데, 9.1.2, 9.0.6, 8.4.10, 8.3.17 버전들을 각각 모두 유지/업데이트 하는 이유가 무엇일까요? [2]
2011-12-16
8122
8913oracle to postgres migration [4]
test
2011-12-14
10998
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다