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 5368 게시물 읽기
No. 5368
한국어 encoding?
작성자
joesp(joesp)
작성일
2004-06-15 00:49
조회수
8,514

안녕하세요. 저 미국사람있는대 여기서 한국어로 post 하려면 힘들지만 영어만 만든 sites로만 대답 안 나와서 여기로 왔읍니다. 내 실문은 어더게 euc_kr data 를 postgresql 에 저창 핫애요?? 득히 .... 어던 datatype 을 사용 해요? char? varchar? please give a sample create table statement or something like that.

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

예. createdb 명령으로 database를 생성하실 때에 -E option으로 charater set을 지정하시면 됩니다.

두가지 선택 가능한 char. set이 있는데요. 하나는 EUC-KR이고, 또 하나는 UNICODE입니다.

EUC-KR은 가장 단순하게 사용할 수 있는 반면에 완성형에 없는 많은 글자를 사용할 수 없습니다. 하지만 대부분의 정상적인 표기에는 문제가 없으므로 일단 이것을 사용하는 것이 좋을 것 같습니다.

두번째 방법인 UNICODE는 내부적으로 UTF-8이라는 unicode encoding을 사용하기 때문에 보다 많은 한글 문자와 타국어를 모두 사용할 수 있습니다. 다만 이 설정을 사용할 경우 client 측에 별도의 설정을 해줘야 할 경우가 있습니다.

web application을 개발할 경우를 예로 들면, 만약 postgresql을 unicode를 사용하도록 했다면 UTF-8을 char set으로 사용해야 합니다. 만약 web application을 unicode가 아닌 한글 char. set으로 쓰고 싶다면 PGCLIENTENCODING이라는 system environment variable이나 CLIENT_ENCODING이라는 run-time environment configuration에 char. set을 한글 코드로 지정해야 합니다. 이 때 쓸 수 있는 한글 char. set은 EUC-KR, JOHAB, UHC가 있습니다. 이 중 UHC가 가장 적절합니다. 대부분 MS-Windows 사용자이고 UHC가 windows의 CP949 code page와 같은 것이니까요.

아무래도 설명서를 보시는 것이 가장 확실할 것 같네요. 영어도 되시니까... ^^;;

 

http://www.postgresql.org/docs/7.4/interactive/charset.html

 

박성철(gyumee)님이 2004-06-15 02:50에 작성한 댓글입니다.

'with the create database command, you can specify with the -E option the character set to use.....

"

 

environment configuration에 char. set을 한글 코드로 지정해야 합니다. 이 때 쓸 수 있는 한글 char. set은 EUC-KR, JOHAB, UHC가 있습니다. 이 중 UHC가 가장 적절합니다.

 

위미는 UHC 을 이용할수있다면 한자 를? because you can use 한자 with UHC?

 

are there open-source client-side libraries do you use to convert euc_kr, johab,uhc to the euc_kr? because, 가장 적절한 문재는 server-side sort order 것이다고 생각합니다. 예를들면 :

 

 

korean=# \encoding utf8

korean=# select id,word from korean order by word;

***(Single step mode: verify command)*******************************************

select id,word from korean order by word;

***(press return to proceed or enter x and return to cancel)********************

 

id | word

----+----------

65 | 막막

66 | 강좌

67 | 설문

68 | 생성

70 | 반면

71 | 지정

69 | 단순하게

72 | 두가지

(8 rows)

 

korean=#

 

한국에 있은 한국사람은 어더게 인댁스 를 사용 합니가? 어더게 sort를 해요?

내가 이해할수업는 방법으로 어더개 큰 euc_kr 데이터베이스를 설립하는가 만약 인댁스가 정말로 업서면!

만약 한국어 PostgreSQL 이메르 릿더가 있다면 거기서로 했는데.....

 

관련을

 

http://www.sirfsup.com/euc_kr.c

 

수고해서 감사 해들립니다.

 

joe

 

joesp(joesp)님이 2004-06-15 06:30에 작성한 댓글입니다.
이 댓글은 2004-06-16 13:30에 마지막으로 수정되었습니다.

>> 위미는 UHC 을 이용할수있다면 한자 를? because you can use 한자 with UHC?

 

UHC는 한자 보다는 EUC-KR에 없는 많은 한글을 포함시킨 char. set입니다.

EUC-KR에는 쓸 수 없는 한글이 많습니다.

 

>> are there open-source client-side libraries do you use to convert euc_kr, johab,uhc to the euc_kr? because, 가장 적절한 문재는 server-side sort order 것이다고 생각합니다. 예를들면 :

 

character set converter는 iconv가 만능입니다.

 

그리고 server-side sort order와 client-side의 char. set과는 상관이 없습니다. 한글의 sort 문제는 FAQ에 해당하는 것입니다.

 

간단히 말해서 initdb를 할 때에 default locale을 지정해 주셔야 합니다.

initdb는 system environment variable인 LC_XXX 들을 읽어서 DB cluster의 기본 locale을 정하지만 대부분 system locale이 C로 되어 있기 때문에 한글에서 문제가 됩니다.

 

locale 중에서 sort order와 관계있는 것은 LC_COLLATE와 LC_CTYPE입니다. 이 둘은 initdb 이후에는 바꿀 수 없습니다. 자세한 것은 메뉴얼을 보십시오.

 

http://www.postgresql.org/docs/7.4/interactive/charset.html#AEN18061

 

결국은 initdb를 할 때에 이렇게 하라는거죠.

 

initdb --locale=ko_KR --lc_messages=C -E unicode -D /data/pgdata

 

즉 locale을 ko_KR로 하고 메세지는 영어로 출력되게 합니다. 기본 char. set은 unicode로 쓰구요.

 

제 기억에, 이렇게 DB cluster를 만든다음에 createdb로 DB를 만들어 사용하시면 sort order 문제는 해결될겁니다.

 

참고로 locale을 쓰시려면 system에서 ko_KR locale을 지원해야 합니다. 잘은 모르겠지만 ko_KR.EUC-KR뿐 아니라 ko_KR.UTF-8도 지원하는 것이 더 확실할 것 같네요.

박성철(gyumee)님이 2004-06-16 23:11에 작성한 댓글입니다.
이 댓글은 2004-06-16 23:13에 마지막으로 수정되었습니다.

ㅎㅏㅆ였던대로했지만 결과는 달임니다.

 

[postgres@www pgsql]$ initdb --locale=ko_KR --lc-messages=C -E unicode -D `pwd`/unidata

 

The files belonging to this database system will be owned by user "postgres".

This user must also own the server process.

 

The database cluster will be initialized with locales

COLLATE: ko_KR

CTYPE: ko_KR

MESSAGES: C

MONETARY: ko_KR

NUMERIC: ko_KR

TIME: ko_KR

 

creating directory /bup/pgsql/unidata ... ok

creating directory /bup/pgsql/unidata/global ... ok

creating directory /bup/pgsql/unidata/pg_xlog ... ok

creating directory /bup/pgsql/unidata/pg_clog ... ok

creating directory /bup/pgsql/unidata/base ... ok

creating directory /bup/pgsql/unidata/base/1 ... ok

selecting default max_connections ... 100

selecting default shared_buffers ... 1000

creating configuration files ... ok

creating template1 database in /bup/pgsql/unidata/base/1 ... ok

initializing pg_shadow ... ok

enabling unlimited row size for system tables ... ok

initializing pg_depend ... ok

creating system views ... ok

loading pg_description ... ok

creating conversions ... ok

setting privileges on built-in objects ... ok

creating information schema ... ok

vacuuming database template1 ... ok

copying template1 to template0 ... ok

 

Success. You can now start the database server using:

 

/usr/local/pgsql/bin/postmaster -D /bup/pgsql/unidata

or

/usr/local/pgsql/bin/pg_ctl -D /bup/pgsql/unidata -l logfile start

 

[postgres@www pgsql]$

[postgres@www pgsql]$ pg_ctl -D /bup/pgsql/unidata/ -o "-p5433" start

postmaster starting

[postgres@www pgsql]$ LOG: database system was shut down at 2004-06-16 15:57:34 CDT

LOG: checkpoint record is at 0/9F60DC

LOG: redo record is at 0/9F60DC; undo record is at 0/0; shutdown TRUE

LOG: next transaction ID: 490; next OID: 17207

LOG: database system is ready

[postgres@www pgsql]$

[postgres@www pgsql]$ psql -p 5543 -d template1

Welcome to psql 7.5devel, the PostgreSQL interactive terminal.

 

Type: \copyright for distribution terms

\h for help with SQL commands

\? for help with psql commands

\g or terminate with semicolon to execute query

\q to quit

 

template1=# \dt

No relations found.

template1=#create database korean;

CREATE DATABASE

template1=\c korean

template1=\q

[postgres@www bup]$ psql -p 5543 -d korean < korean.sql

.... many insert statements, etc, as korean.sql is dump of other korean db

[postgres@www bup]$ psql -p 5543 -d korean

Welcome to psql 7.5devel, the PostgreSQL interactive terminal.

 

Type: \copyright for distribution terms

\h for help with SQL commands

\q to quit

 

korean=#

korean=# \encoding utf8

korean=# select id,word from korean order by word;

id | word

----+----------

68 | 생성

72 | 두가지

67 | 설문

69 | 단순하게

66 | 강좌

73 | 깔다

65 | 막막

70 | 반면

71 | 지정

(9 rows)

 

korean=# \encoding unicode

korean=# select id,word from korean order by word;

id | word

----+----------

68 | 생성

72 | 두가지

67 | 설문

69 | 단순하게

66 | 강좌

73 | 깔다

65 | 막막

70 | 반면

71 | 지정

(9 rows)

(the order is incorrect and unsorted)

korean-# \l

List of databases

Name | Owner | Encoding

korean | postgres | UNICODE

template0 | postgres | UNICODE

template1 | postgres | UNICODE

(3 rows)

 

korean-#

 

joesp님이 2004-06-17 07:09에 작성한 댓글입니다. Edit

test를 해보니까 말씀하신 것 처럼 sort 안되네요. char set이 unicode인 경우 이렇게 되는 것 같습니다. 좀 더 연구를 해봐야 할 것 같네요. char. set을 EUC_KR로 하니까 sort order는 정상입니다. 일단은 EUC_KR을 써야 할 것 같네요. 다른 분들의 도움이 있어야 할 것 같습니다.

locale을 사용하면 sort order를 postgresql이 결정하는 것이 아니고 OS가 결정하는 것으로 판단되는데 OS의 문제인지...

좌우간 이렇게 하셔야 할 것 같습니다.

 

initdb -E EUC_KR --locale=ko_KR --lc-messages=C /pgsql/data

 

createdb -E EUC_KR korean

 

이건 잘 될겁니다.

 

좀 더 연구해 보고 문제점을 찾으면 여기에 올리겠습니다. 제가 분명히 뭔가 착각을 하는 것 같은데.. -.-;;;

 

박성철(gyumee)님이 2004-06-17 22:19에 작성한 댓글입니다.

[crane76@fb /home/crane76] % createdb crane76 -E UTF-8 -U pgsql

Password:

CREATE DATABASE

[crane76@fb /home/crane76] % psql crane76

Password:

Welcome to psql 7.4.2, the PostgreSQL interactive terminal.

 

Type: \copyright for distribution terms

\h for help with SQL commands

\? for help on internal slash commands

\g or terminate with semicolon to execute query

\q to quit

 

crane76=> create table korean ( indx int, word varchar(30));

CREATE TABLE

crane76=> insert into korean values ( 1, '사과');

INSERT 25467 1

crane76=> insert into korean values ( 2, '배');

INSERT 25468 1

crane76=> insert into korean values ( 3, '자두');

INSERT 25469 1

crane76=> insert into korean values ( 4, '망고');

INSERT 25470 1

crane76=> insert into korean values ( 5, '파인애플');

INSERT 25471 1

crane76=> insert into korean values ( 6, '포도');

INSERT 25472 1

crane76=> insert into korean values ( 7, '딸기');

INSERT 25473 1

crane76=> insert into korean values ( 8, '오렌지');

INSERT 25474 1

crane76=> select * from korean order by word;

indx | word

------+----------

7 | 딸기

4 | 망고

2 | 배

1 | 사과

8 | 오렌지

3 | 자두

5 | 파인애플

6 | 포도

(8 rows)

 

crane76=> \l

List of databases

Name | Owner | Encoding

-----------+---------+----------

crane76 | pgsql | UNICODE

pgsql | pgsql | UNICODE

postfix | postfix | UNICODE

template0 | pgsql | UNICODE

template1 | pgsql | UNICODE

(5 rows)

 

crane76=>

 

 

잘 되는데요?

 

initdb는 어떻게 했는지 기억 안나지만 아마도 UTF-8로 하지 않았나 생각됩니다.

 

OS : FreeBSD 5.2.1

PostgreSQL : 7.4

 

재학님이 2004-06-19 01:18에 작성한 댓글입니다.
이 댓글은 2004-06-19 01:20에 마지막으로 수정되었습니다. Edit

질문자가 외국인인가봐..

영어를 번역기 돌려서 하나봐..ㅋㅋㅋㅋ

 

모꼬모지님이 2004-06-19 14:42에 작성한 댓글입니다. Edit

보통..

db저장시..

64base

로 저장해서 하거나..

16진수 hex값으로..저장하고 검색할때..변환해서 검색하는게..

신상에 좋습니다.

안그럼..

아햏햏햏이나..

좇 ㅡoㅡ; 기록이 안됩니다.

모꼬모지님이 2004-06-19 14:44에 작성한 댓글입니다. Edit

한말만으로 말하면

initdb --locale=ko_KR.utf8 --lc-messages=C -E unicode -D `pwd`/utf8data

를 하면 도얘요. --locale=ko_KR 안니고요. 모꼬모지님이 번역을 부탁헀나봐.

나댸문에 이런 필요가 업지만. 감사 들입니다.

 

joesp님이 2004-06-20 12:42에 작성한 댓글입니다.
이 댓글은 2004-06-20 12:43에 마지막으로 수정되었습니다. Edit

으잉? 이상하다.. 저거 해봤는데.. -.-;;;

좌우간 잘 되었다고 하니까 다행이네요.

즐거웠습니다. 계속 찾아와 주세요.

교포 2세이신 것 같은데... 한국어 잘 하시네요.

박성철(gyumee)님이 2004-06-23 09:07에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
5374postgreSQL 재시작 에러 [1]
이동학
2004-06-17
3977
5373소수점 유지.
이상호
2004-06-17
1988
5372pgadmin3 [2]
궁금
2004-06-16
1839
5368한국어 encoding? [10]
joesp
2004-06-15
8514
5367합계 구하는것 때문에 질문 드립니다.. [4]
박민재
2004-06-14
1894
5365group by 에서의 데이터 추출에 대하여 ㅠ.ㅠ [2]
궁금이
2004-06-11
1948
5362[질문] 설치과정에서 psql:relocation error에 관하여!! [1]
채정병
2004-06-09
1776
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.025초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다