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 6270 게시물 읽기
No. 6270
[삭제됨]UNICODE DB에서 한글필드 Unique Index
작성자
김남일
작성일
2005-08-18 14:07ⓒ
2005-08-18 16:40ⓜ
조회수
2,699

initdb --lc-collate=C 옵션을 지정해서 해결됬습니다.

무식해서 한동안 손발이 고생했습니다. 아래 내용은 무시하시기 바랍니다.

 

답변주신분께 감사합니다.

 

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

인코딩을 UNICODE로 성성한 DB에서 클라이언트 인코딩을 uhc, euc_kr로 변경후 사용하는 경우 Unique 제약조건이 잘못 처리되고 있습니다.

( euc_kr로 생성된 DB는 정상적으로 처리되었음 )

리눅스에서는 중복되지 않은 자료를 중복 처리하고 있었으며, 윈도우에서는 중복처리가 되지 않았습니다. 점검이 필요할것으로 생각됩니다.

 

CREATE TABLE test
(
name varchar NOT NULL,
CONSTRAINT pk_test PRIMARY KEY (name)
)
WITHOUT OIDS;
ALTER TABLE test OWNER TO postgres;

 

insert into test values('홍길동');

insert into test values('홍길동');

insert into test values('장길산');

insert into test values('장길산');

 

select * from test;

 

**** 윈도우 pgsql ***

test=# insert into test values('홍길동');
INSERT 0 1
test=#
test=# insert into test values('홍길동');
INSERT 0 1
test=#
test=# insert into test values('장길산');
INSERT 0 1
test=#
test=# insert into test values('장길산');
INSERT 0 1
test=#
test=#
test=#
test=# select * from test;
name
--------
홍길동
홍길동
장길산
장길산
(4 rows)

test=#

 

 

**** 리눅스 pgsql ***

test=# insert into test values('홍길동');
INSERT 0 1
test=#
test=# insert into test values('홍길동');
ERROR: duplicate key violates unique constraint "pk_test"
test=#
test=# insert into test values('장길산');
ERROR: duplicate key violates unique constraint "pk_test"
test=#
test=# insert into test values('장길산');
ERROR: duplicate key violates unique constraint "pk_test"
test=#
test=#
test=#
test=# select * from test;
name
--------
홍길동
(1 row)

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

이상하네요. 저는 잘 됩니다.

 

이건 solaris for sparc 8에서 pgsql 8.0.1로 한 겁니다.

pcrm_up=# create table test ( name varchar(100) not null primary key);

NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"

CREATE TABLE

pcrm_up=# \encoding UHC

pcrm_up=# insert into test values('홍길동');

INSERT 2953737 1

pcrm_up=# insert into test values('홍길동');

ERROR: duplicate key violates unique constraint "test_pkey"

pcrm_up=# insert into test values('장길산');

INSERT 2953739 1

pcrm_up=# insert into test values('장길산');

ERROR: duplicate key violates unique constraint "test_pkey"

 

그리고 이건 linux에서 한겁니다. 역시 8.0.1

pcrm_up=# create table test ( name varchar(100) not null primary key);

NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"

CREATE TABLE

pcrm_up=# \encoding UHC

pcrm_up=# insert into test values('홍길동');

INSERT 21855073 1

pcrm_up=# insert into test values('홍길동');

ERROR: duplicate key violates unique constraint "test_pkey"

pcrm_up=# insert into test values('장길산');

INSERT 21855077 1

pcrm_up=# insert into test values('장길산');

ERROR: duplicate key violates unique constraint "test_pkey"

pcrm_up=# select * from test;

name

--------

홍길동

장길산

(2 rows)

 

윈도우는 사용하지 않아서 잘 모르겠네요.

박성철(gyumee)님이 2005-08-18 14:45에 작성한 댓글입니다.
이 댓글은 2005-08-18 14:58에 마지막으로 수정되었습니다.

두번째 테스트 화면은 리눅스였으나, 윈도우로 잘못 표기해서 수정했습니다.

 

1. 솔라리스에서는 잘 되는가 보군요.

2. DB 인코딩을 UNICODE로 선택해서 생성후 테스트 해보시기 바랍니다.(기본 UNICODE 였습니다.)

김남일님이 2005-08-18 15:30에 작성한 댓글입니다.
이 댓글은 2005-08-18 15:32에 마지막으로 수정되었습니다. Edit

한글 인덱스, 정렬 관련 문제는

거의 대부분이, initdb 할때, 로케일 관련 문제입니다.

 

이곳게시판에서 잘 찾아서 읽으시길..

김상기(ioseph)님이 2005-08-18 16:00에 작성한 댓글입니다.

윈도우 pgsql

lc_collate                     | Korean_Korea.51949
lc_ctype                       | Korean_Korea.51949
lc_messages                    | Korean_Korea.51949
lc_monetary                    | Korean_Korea.51949
lc_numeric                     | Korean_Korea.51949
lc_time                        | Korean_Korea.51949

server_encoding                | EUC_KR

 

리눅스 pgsql

 lc_collate                     | en_US.UTF-8
 lc_ctype                       | en_US.UTF-8
 lc_messages                    | en_US.UTF-8
 lc_monetary                    | en_US.UTF-8
 lc_numeric                     | en_US.UTF-8
 lc_time                        | en_US.UTF-8

 server_encoding                | UNICODE

 

로케일이 잘못되었는지요?

김남일님이 2005-08-18 16:13에 작성한 댓글입니다. Edit

1. 솔라리스에서는 잘 되는가 보군요.

 

>> 제가 솔라리스, 리눅스 둘다 올렸는데요? 리눅스도 잘되요.

 

2. DB 인코딩을 UNICODE로 선택해서 생성후 테스트 해보시기 바랍니다.(기본 UNICODE 였습니다.)

 

>> 예 UNICODE로 했습니다. 요즘은 UNICODE 외에는 안쓰죠.

 

로케일이 잘못되었는지요?

 

>> 잘못 된 것인지는 모르겠지만 저는 이렇게 합니다. 리눅스 기준입니다.

 

lc_collate | C

lc_ctype | ko_KR.UTF-8

lc_messages | C

lc_monetary | ko_KR.UTF-8

lc_numeric | ko_KR.UTF-8

lc_time | C

 

server_encoding | UNICODE

 

lc_messages는 개인 취향이구요 lc_collate는 리눅스의 버그 때문에 C로 해야 합니다. 다른 OS에서는 ko_KR.UTF-8로 해야겠죠.

 

박성철(gyumee)님이 2005-08-18 16:45에 작성한 댓글입니다.
이 댓글은 2005-08-18 16:49에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
6273fedora core 4 에서 pg_hba.conf 에서 trust 말고 다른 옵션은 ? [2]
양인철
2005-08-18
2430
6272createlang로 language 인스톨 질문 [2]
장재혁
2005-08-18
2121
6271trigger 예제 실행관련 질문 [4]
장재혁
2005-08-18
2780
6270[삭제됨]UNICODE DB에서 한글필드 Unique Index [5]
김남일
2005-08-18
2699
6269자바에서 postgresql 테이블의 변경(insert,update) 모니터 [3]
장재혁
2005-08-18
2205
6268pgsql에서 Text형 컬럼에 세이노 컬럼을 insert해보신분? [10]
이현순
2005-08-17
3311
6267유니코드 UCS-2 범위밖에 지원 못하는군요. [5]
송효진
2005-08-14
2393
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다