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 8530 게시물 읽기
No. 8530
한글 데이터를 copy로 내리는데 fixed length로 보이지 않군요.
작성자
박춘삼
작성일
2009-10-26 22:24ⓒ
2009-10-26 22:26ⓜ
조회수
7,328

테이블 레이아웃

          Table "public.aa"
 Column |      Type      | Modifiers
--------+----------------+-----------
 a1     | character(100) |
 a2     | character(100) |
 c3     | character(100) |

-- 쿼리의 실행 :
insert into aa values('가나다','abcd','1234');
Query returned successfully: 1 row affected, 94 ms execution time.

-- 쿼리의 실행 :
insert into aa values('   ','abcd','1234');
Query returned successfully: 1 row affected, 63 ms execution time.

-- 쿼리의 실행 :
insert into aa values('   ','abcd','  34');
Query returned successfully: 1 row affected, 63 ms execution time.

-- 쿼리의 실행 :
insert into aa values(' 나라','abcd','  34');
Query returned successfully: 1 row affected, 78 ms execution time.


select / copy를 하면 
select rpad(a1,10,' ')||'|'||a2||'|'||c3 from aa
order by 1


"          |abcd|1234"
"          |abcd|  34"
"가나다       |abcd|1234"
"  나라      |abcd|  34"
" 나라       |abcd|  34"

이렇게 되네요. 어떻게 해야 첫번째 컬럼에 대해서 정확한 길이 만큼 보이게 할 수 있나요?

감사합니다.
박춘삼

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

character를 character varying로 변하셔서 해보시기 바랍니다.

김병석(byung82)님이 2009-10-27 04:32에 작성한 댓글입니다.

varchar와 char 문제가 아니라,
DB에서 character 자료형이라는것이 프로그래밍의 byte와 출발부터 다르다는 것이 문제겠지요.
문자형을 말그대로 문자형을 의미하지, byte를 의미하지 않습니다.

'대한민국' 은 네 글자로 되어있고, 'Love'도  네 글자로 되어있습니다.
이것이 내부적으로 몇byte로 사용되는지에 대해서는 고려하지 않습니다.
그래서, '두번째글자부터 1개만 뽑아라' 라는 식이라면, '한', 'o' 가 뽑히겠죠.

그래서, 위와 같은 문제가 발생하는데요,
저 문제를 피해가려면, 결국 몇byte를 사용하는가?를 계산해 내야합니다.
그러기 위해서, octet_length() 함수를 사용합니다.


ioseph=> select a1 || 
rpad('', 10 - octet_length(convert(a1::bytea,'utf8','uhc')), ' ')
||'|'||a2||'|'||c3 
from aa order by 1;
       ?column?
----------------------
           |abcd|  34
           |abcd|1234
  Love     |abcd| 234
  나라     |abcd|  34
 가나다    |abcd|1234
(5 rows)
김상기(ioseph)님이 2009-10-27 11:01에 작성한 댓글입니다.
이 댓글은 2009-10-27 11:04에 마지막으로 수정되었습니다.

김상기님,


진심으로 감사합니다. 덕분에 어려운 문제를 풀었습니다.


저에게 메일 주소를 주시면 제가 약소하게나마 저녁을 사고 싶습니다.

그만큼이나 저에게는 너무 어려운 것을 덕분에 해결했습니다.


연락 주십시요. ㅎ ㅎ

myhome0307@naver.com 입니다.


다시한번 감사드립니다.

박춘삼

박춘삼님이 2009-10-31 17:07에 작성한 댓글입니다.
이 댓글은 2009-10-31 17:09에 마지막으로 수정되었습니다. Edit

저녁보다 술이 더 낫지 않을까요? 하하

언제 기회 닿으면 술 한 잔 사세요.

소주 한 병이면 충분합니다.

김상기(ioseph)님이 2009-11-01 02:10에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
8534엉뚱질문: Oracle 로 사용하던 기업어플에 PostgreSQL 써도? [3]
지나는이
2009-11-04
8281
8532public 스키마를 사용 안해야 하나요? [4]
이정원
2009-10-27
8403
8531PostgreSQL UNIX/Linux 설치 옵션 참고
김대청
2009-10-27
7817
8530한글 데이터를 copy로 내리는데 fixed length로 보이지 않군요. [4]
박춘삼
2009-10-26
7328
8529pgsql의 Data 저장의 관하여 query 속도 문의 [8]
성진
2009-10-23
8586
8528한글 문제... [2]
박병호
2009-10-23
7964
8527null sort 문제 [1]
질문자
2009-10-20
6938
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다