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 7239 게시물 읽기
No. 7239
유니코드로 셋팅된 데이타 델파이에서 읽기
작성자
김준형(kjmjkim)
작성일
2007-10-15 11:14ⓒ
2009-09-30 15:56ⓜ
조회수
9,162

ssss

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

안녕하세요. ^^;

저두 예전에 프로그래밍 하면서 곤란했던 문제네요.

일단은 델파이 기본 컴포넌트들이 UTF-8(유니코드)를 지원하지 않습니다.

가장 좋은 방법은 디비를 euc-kr로 설정하시는게 정신 건강에 좋으실것 같고요.

그래도 유니코드를 사용하셔야 겠다면 tnt라는 서드파티 무료 유니코드 지원 컨포넌터가 있습니다.

그러나 디비 커넥션 컨포넌트는 어떤것을 사용하시는지요?

혹시 zeos를 사요하신다면. 흠.... 일반적으로 유니코드는 2바이트 이상이죠. 헌데 potgresql 유니코드를 1바이트로 봅니다. 그래서 결과값을 가져올때 값이 짤리는 경험을 한바가 있습니다.

헌데 최근 코드기어 델파이 2008에서 간단한 프로그래밍을 한적이 있는데 zeos디비 커넥션 컴포넌트와 사용을했었죠. 길이가 잘못오는것 말고는 입출력은 유니코드로 제대로 되는것 같더군요.

좀 오래 되서 확실한지는 장담을 못드리겠네용.(이런 무책임한 말을)

그리고 아래 검색해 보시면 ADO로 디비 접속해서 유니코드를 읽는 경우는 해결 했다는 분도 계셨던걸로 압니다.

도움이 되었으면 좋겠네요.

그럼 수고하세요.

이상원(caveman)님이 2007-10-15 12:55에 작성한 댓글입니다.

한글 문제 때문이라면, 
client_encoding 환경 설정 값을 uhc 로  지정하면서, 
db 쪽에서는 utf-8문자셋을 쓰고, client 쪽에서는 확장 완성형을 쓰고 하면 됩니다. 

client 쪽에서 db 커넥션을 만든 다면 바로 그 커넥션으로 "set client_encoding to uhc" 이 쿼리를 한번 보내주면 그 다음부터는 완성형 문자셋으로 모든 것을 사용가합니다. 그렇게 쓰세요.

이 문제 말고, 한.중.일 모든 문자가 다 하나의 DB에서 처리되어야하는 상황이라면, 
MS windows 에서는 조금 문제가 복잡합니다. 
왜냐하면 MS windows 의 문자셋 변환들이 utf-8 기반이 아니라, utf-16기반이거든요.
PostgreSQL 쪽에서 utf-16 쪽 문자셋을 깔끔하게 지원하는 그 때가 되어야 
제가 보기에는 MS windows 환경에서 다국어 처리가 깔끔하게 움직이지 않을까싶습니다. 

그렇게 하지 않으려면, PgAdmin 처럼 GUI 라이브러리 차원에서 utf-8을 지원해야할 것 같네요.

김상기(ioseph)님이 2007-10-15 13:27에 작성한 댓글입니다.

DB에 한번만 이걸 해 주세요;

ALTER DATABASE DB이름 set client_encoding TO uhc;

이렇게 하면 접속시마다 set client_encoding ... 를 안해줘도 됩니다.

물론; 이렇게 하면 정상적으로 utf8로 쓰던 클라이언트들에 문제가;;;;;;

신기배(소타)님이 2007-10-16 00:41에 작성한 댓글입니다.

저도 Zeos를 이용해서 UTF8 데이터(한글뿐만 아니라 UHC 문자셋에 없는 중국어땜시.. ^^;)를 읽어보려고 시도했는데 기본적으로 Zeos의 PostgreSQL은 UTF8을 지원하지 않습니다. 소스를 보면 그 부분은 VARCHAR 처리와 다를바가 없죠.


내부 버퍼 접아줄때도 SizeOf(WideChar)*Length를 잡야야하는데 그냥 Length로만 잡아서 결론적으론 데이터가 짤려버리는 현상이 발생합니다. 시간 남으면 이거 찬찬히 볼라고했는데 시간이 나질 안네요..


결국 요즘 생각은 UTF8 데이터베이스를 포기할수 없고 Zeos를 포기하려고 하고 있네요.. dbExpress는 유니코드를 지원한다나 어쩐다나..^^;


글 적다보니 궁금한게 생기네요... UTF8 데이터베이스고 client_encoding이 UTF8일 경우..


DataSet.FieldByName('field').AsString은 UTF8String이 나와야할까요? 아니면 UTF8String을 UTF8Decoding해서 String으로 변환해서 나와야할까요?


DataSet.FieldByName('field').AsWideString도 마찬가지로.. UTF8String을 WideString으로 Casting하는게 맞을까요? 아니면 UTF8String을 UTF8Decoding해서 리턴하는게 맞을까요?


어떻게 생각하느냐에 따라서 완전 다를듯.. ^^;

최정대(whitekid)님이 2007-10-16 11:27에 작성한 댓글입니다.

ㅎㅎㅎ 그건 몸으로 부디쳐 보는수 밖에 없을것 같사옵니다.

이상원(caveman)님이 2007-10-17 13:42에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7242쿼리 플랜... [3]
데니
2007-10-23
6178
7241PostgreSQL 예찬론 [3]
최정대
2007-10-18
6691
7240서버에 하드를 교체할려구 합니다.
사랑니
2007-10-18
5290
7239유니코드로 셋팅된 데이타 델파이에서 읽기 [5]
김준형
2007-10-15
9162
7238리눅스서버에서 윈도우DB에 접근은 어떻게..?
나그네
2007-10-12
5650
7237vacuum 이 제대로 되지 않습니다. [2]
dontgo
2007-10-10
5544
7236DB백업이란걸해보려고, 여기에서 글을 찾아 pg_dump라는 키워드를 찾았으나.. [4]
Choi
2007-10-10
6265
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다