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 10445 게시물 읽기
No. 10445
한자(중국어) 저장시 일부 문자가 깨집니다 ㅜ.ㅜ
작성자
이기자(k3i2)
작성일
2023-10-24 12:16
조회수
1,674

DB생성은 아래처럼 했고,


ENCODING = 'UTF8'

TABLESPACE = pg_default

LC_COLLATE = 'C'

LC_CTYPE = 'C'

CONNECTION LIMIT = -1;


저장 컬럼은 character varying(255)입니다.

예를들어 问答题 를 저장하면 이상하게 깨지는데,

PgAdminIII에서 데이타를 열어서 그 깨진데이타를 수정할려고 클릭해 수정모드로보면 정상적으로 보입니다.

그러다 포커스를 옮겨서 다시 표시모드로 들어가면 깨집니다.

PgAdminIII에서만이 아니라, 제작한 프로그램에서도 똑같이 깨져보이네요 ㅜ.ㅜ

근데, 같은 환경(PC)에서 Mysql DB에 저장한 똑같은 데이타는 정상으로 저장되고 보입니다.

클라이언트의 PostgreSql환경이 뭐가 지원이 안되는 문제인거같은데, 어찌 해결해야되나요 ㅜ.ㅜ

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

간체 문제인데요. 

서버 인코딩이 UTF-8 이고, 잘 저장 되었다고 가정하면 사용하고 있는 출력용 글꼴이 유니코드의 간체 중국문자를 잘 표시하는지부터 확인해보셔야합니다. 


 

김상기(ioseph)님이 2023-10-24 16:16에 작성한 댓글입니다.

답변감사합니다.

같은 PC에서, 같은 프로그램으로 같은글꼴(Tahoma)로 Mysql에 저장된건 잘불러오고 잘 표시됩니다. 그러니 프로그램에서 쓰는 글꼴은 표시가 가능한거죠.

프로그램에서 같은 글꼴로 완전 같은 프로그램인데, DB만 바꾼겁니다.

윈도우즈환경에서 파워빌더로 개발을하고있는데, 글자 폰트는 안니거같고,

PGAdmin과 ODBC같은게 지원을 못한는거같은데,

pgadmin에서도 깨지고, 당연히 프로그램에서도 깨집니다.

이기자(k3i2)님이 2023-10-24 20:31에 작성한 댓글입니다.
이 댓글은 2023-10-24 20:37에 마지막으로 수정되었습니다.

아, show client_encoding

쿼리를 한번 실행해서 client_encoding 이 uhc 나, euc_kr로 바뀌지 않았는지 확인해보세요.


만약 바뀌었다면, 어디서 바꾸는지 찾아서 그걸 utf-8 로 쓸 수 있도록 해야 할 것 같네요.


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


더 꼼꼼히 살펴본 결과, pgadmin4 에서는 client encoding과 server encoding이 모두 utf8 이면 이런 문제가 생기지는 않는데,

윈도우즈의 콘솔 출력인 경우 (이걸 뭐라고 해야할지는 모르겠지만(C의 printf) 아무튼 cmd 창 같은 곳에서 출력되는 경우) 윈도우즈는 그 해당 인코딩으로 자동변환을 해버리네요. 그러면서 문제가 생기네요. code page를 바꾸어도 마찮가지네요.

어쩌면 윈도우 기본 GUI 컴포넌트들을 사용하는 경우도 그렇지 않을까? 하는 생각을 합니다.


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


그래서 윈도우즈 기반 GUI 도구들도 살펴보았는데, 특이 사항이 없었습니다.

(참, 서버도 윈도우즈에서 돌아갑니다. utf8 - c, c )

dbeaver - jdbc 이놈은 그냥 잘 되었고,

heidisql - libpq 이놈도

odbcquerytool - odbc (unicode derver여야함) - 이놈은 기본 grid 글꼴에서 문제가 있어, 중국어 간체 지원 글꼴로 바꾸고서야 제대로 보였습니다.


확실한 것은 psql 같은 콘솔 표준출력을 사용하는 녀석들이 한국어 윈도우즈에서 한국어 외 자료를 처리하려고 할 때 문제가 있는 것은 사실이네요.

김상기(ioseph)님이 2023-10-25 18:26에 작성한 댓글입니다.
이 댓글은 2023-10-26 00:10에 마지막으로 수정되었습니다.

답변감사합니다.

제가 지식이 짧아서 다 알아듣진 못하겠고 ㅜ.ㅜ

일단 show client_encoding 해보니 결과값이, UNICODE 라고 나오네요...

일단 제가 해볼수있는건, 서버측에 설치된 버전이 9.x버전인데, 최신버전으로 업데이트를 해보는건데, 혹시 지금 9버전에 설치된 상태에서 그냥 최신버전을 다운받아 설치해도 현재 운영중인 9.x버전은 그대로 운영이 가능한건가요?

이기자(k3i2)님이 2023-10-27 00:44에 작성한 댓글입니다.

메이져 버전 업그레이드를 하려면, dump && restore 하든가, pg_upgrade 명령을 이용해서 기존 사용하고 있던 자료를 새 버전용으로 바꿔야합니다. 


이상한점

show client_encoding 결과로 UTF8 이 아니라, UNICODE로 나오면 정말 옛날 버전인데요. 

데이터베이스 인코딩 이름이 UNICODE로 할래, UTF8로 할래로 정말 오래전에 논쟁했던 기억이납니다. 8.0 8.1 이 버전때였는데, 이상하네요. UTF8 로 나오지 않았다면, 

select version() 으로 다시 한번 확인해보세요.

김상기(ioseph)님이 2023-10-27 05:24에 작성한 댓글입니다.

10년 이상전부터 사용했던거라 오래된 버전이긴합니다.

윈도우즈용이고, "PostgreSQL 9.3.2, compiled by Visual C++ build 1600, 32-bit" 이네요..

업그레이드 하려면 어떻게 하는게 제일 안전한가요?

기존 데이타 깨지거나 손실올까봐 좀 겁나긴 하네요 ㅜ.ㅜ

백업을 핺긴 합니다만...

이기자(k3i2)님이 2023-10-27 13:52에 작성한 댓글입니다.

9.x 버전이라면, UNICODE라고 나올 수가 없는데, 

사용하고 있는 client 측 라이브러리가 아주 옛날 것인가봅니다. 

(odbc나, jdbc나, libpq나)


일단 9.x 버전의 서버라면, 최신 odbc, jdbc, libpq 다 써도 괜찮은 버전이기 때문에, 

데이터베이스 연결 드라이브를 한번 바꿔보는 것도 한 방법일 것 같습니다.


메이져 버전 업그레이드 하는 방법 가운데 제일 손쉬운 방법은 

pg_dumpall 명령과, pg_dump를 이용해서 데이터베이스를 덤프하고, 

새 버전에서 그 파일로 데이터베이스를 복원하는 것입니다. 


워낙 오래된 소프트웨어이다보면 인터넷에 그 방법은 엄청나게 많습니다. 


찾아서 테스트 해보고, 나름의 전력을 짜면 될 것 같습니다. 

김상기(ioseph)님이 2023-10-27 18:51에 작성한 댓글입니다.

감사합니다.

업그레이드 시켜봐야겠네요/

이기자(k3i2)님이 2023-10-27 19:51에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
10449인덱스걸면 제일빠른 데이타 타입 순서가 어떻게되나요? [3]
이기자
2023-11-28
1232
10447create extension oracle_fdw; undefined symbol 관련 에러 [8]
chaney
2023-11-03
1668
10446쿼리 실행 계획 buffers [1]
신현근
2023-10-27
1507
10445한자(중국어) 저장시 일부 문자가 깨집니다 ㅜ.ㅜ [8]
이기자
2023-10-24
1674
10443세로로 조회된 성적 데이타를 날짜별로 가로로 나타내고 싶습니다. 날짜별로 과목 수 다를수있음.. [1]
이기자
2023-10-19
1513
1044115 버전에서 public 스키마 변경 관련 문의 드립니다. [2]
초보
2023-09-18
2030
10440autocommit = off 질문
용암그라탕
2023-09-14
1924
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다