저자 :Tatsuo ishii (<ishii@postgresql.org), 마지막 업데이트 된 2000-03-22. 확인하다Tatsuo 웹 사이트자세한 내용은
multibyte (MB) 토토 캔은입니다 허용PostgresTO EUC와 같은 다중 토토 캔 문자 세트를 처리하십시오 (확장 유니 닉스 코드), 유니 코드 및 뮬 내부 코드. 와 함께MB활성화 된 다중 토토 캔 문자 세트를 사용할 수 있습니다 정기적 인 표현식 (Regexp) 및 기타 기능. 기본 인코딩 시스템이 선택 중에 선택되어Postgres설치 사용initdb. 이것은 될 수 있습니다 를 사용하여 데이터베이스를 작성할 때 재정의createb또는 SQL 명령을 사용하여 데이터 베이스. 따라서 각각 a로 여러 개의 데이터베이스를 가질 수 있습니다 다른 인코딩 시스템.
MB또한 몇 가지 문제를 해결합니다 ISO8859를 포함한 8 비트 단일 토토 캔 문자 세트와 관련하여. (나 모든 문제가 해결되었다고 말하지 않을 것입니다. 방금 확인했습니다 회귀 테스트는 잘 진행되었고 프랑스 캐릭터 몇 명은 패치와 함께 사용됩니다. 문제가 있으면 알려주세요 8 비트 문자를 사용하는 동안.)
Multibyte 옵션으로 구성 실행 :
% ./configure-enable-multibyte [=encoding_system]여기서encoding_system할 수 있습니다 다음 표의 값 중 하나 :
표 5-1.Postgres문자 세트 인코딩
인코딩 | 설명 |
---|---|
SQL_ASCII | ASCII |
EUC_JP | 일본 EUC |
EUC_CN | 중국 EUC |
EUC_KR | 한국 EUC |
EUC_TW | 대만 EUC |
유니 코드 | 유니 코드 (UTF-8) |
mule_internal | 뮬 내부 |
latin1 | ISO 8859-1 영어 및 일부 유럽 언어 |
latin2 | ISO 8859-2 영어 및 일부 유럽 언어 |
latin3 | ISO 8859-3 영어 및 일부 유럽 언어 |
latin4 | ISO 8859-4 영어 및 일부 유럽 언어 |
latin5 | ISO 8859-5 영어 및 일부 유럽 언어 |
KOI8 | KOI8-R (U) |
WIN | Windows CP1251 |
alt | Windows CP866 |
다음은 구성의 예입니다Postgres일본인 인코딩을 사용하려면 기본:
% ./configure-enable-multibyte = euc_jp
인코딩 시스템이 생략 된 경우 (./configure --enable-multibyte), sql_ascii가 가정됩니다.
initdb기본값을 정의합니다 a 인코딩Postgres설치. 예를 들어:
% initdb -e euc_jp기본 인코딩을 EUC_JP로 설정합니다 (확장 UNIX 코드 일본어). "-e"대신 "encoding"을 사용할 수 있습니다. 더 긴 옵션 문자열을 입력하는 것이 좋습니다. 없는 경우 -e 또는 -encoding 옵션이 제공되며 구성 시간에 지정된 인코딩이 사용됩니다.
다른 인코딩으로 데이터베이스를 만들 수 있습니다.
EUC_KR 인코딩이있는 "Korean"이라는 데이터베이스를 작성합니다. 이것을 달성하는 또 다른 방법은 SQL 명령을 사용하는 것입니다 :인코딩으로 데이터베이스 한국어 생성 = 'euc_kr';데이터베이스의 인코딩은로 표시됩니다.인코딩 열inpg_database시스템 카탈로그. 당신은 그것을 볼 수 있습니다 psql 명령의 -l 또는 \ l 사용.
$ psql -l 데이터베이스 목록 데이터베이스 | 소유자 | 부호화 --------------+---------+------------------- euc_cn | t-isii | EUC_CN euc_jp | t-isii | EUC_JP euc_kr | t-isii | EUC_KR euc_tw | t-isii | EUC_TW mule_internal | t-isii | mule_internal 회귀 | t-isii | SQL_ASCII 템플릿 1 | t-isii | EUC_JP 테스트 | t-isii | EUC_JP 유니 코드 | t-isii | 유니 코드 (9 줄)
Postgres백엔드와 프론트 엔드 사이의 자동 인코딩 번역 일부 인코딩.
표 5-2.Postgres클라이언트/서버 문자 세트 인코딩
서버 인코딩 | 사용 가능한 클라이언트 인코딩 |
---|---|
EUC_JP | euc_jp, sjis |
euc_tw | euc_tw, big5 |
latin2 | latin2, win1250 |
latin5 | latin5, 승리, alt |
mule_internal | euc_jp, sjis, euc_kr, euc_cn, euc_tw, big5, latin1 to latin5, win, alt, Win1250 |
자동 인코딩 번역을 활성화하려면해야합니다 말하다Postgres인코딩 프론트 엔드에서 사용하고 싶습니다. 몇 가지 방법이 있습니다 이것을 달성하십시오.
사용\ encoding명령PSQL. \ encoding프론트 엔드를 변경할 수 있습니다 즉석에서 인코딩. 예를 들어, 인코딩을 변경합니다 sjis, type :
\ sjis 인코딩
libpq 함수 사용.\ encoding실제로 PQSetClientEncoding ()을 목적으로 호출합니다.
int pqsetclientencoding (pgconn *conn, const char *인코딩)여기서conn백엔드 및인코딩is 사용하려는 인코딩. 인코딩을 성공적으로 설정하면 반환 0, 그렇지 않으면 -1. 이 연결을위한 현재 인코딩 다음을 사용하여 표시 할 수 있습니다.
int pqclientencoding (const pgconn *conn)인코딩이 아닌 "인코딩 ID"를 반환합니다. "EUC_JP"와 같은 기호 문자열. 인코딩 ID를 An로 변환합니다 인코딩 기호, 당신은 사용할 수 있습니다 :
char *pg_encoding_to_char (intencoding_id)
사용set client_encoding to. 이 SQL은 프론트 엔드 측 인코딩을 설정할 수 있습니다. 명령:
set client_encoding 'encoding';또한이 목적으로 SQL92 구문 "Set Names"를 사용할 수 있습니다 :
이름 설정 '인코딩';현재 프론트 엔드 인코딩 쿼리 :
show client_encoding;기본 인코딩으로 돌아 가기 :
Reset Client_Encoding;
사용pgclientencoding. 만약에 환경 변수pgclientencoding는 클라이언트에 정의되어 있습니다 환경, 해당 클라이언트 인코딩이 자동으로 선택됩니다 백엔드 연결이 이루어질 때. (이후에는 가능합니다 언급 된 다른 방법 중 하나를 사용하여 상체해야합니다 위에.)
유니 코드와 기타 간 자동 인코딩 변환 인코딩은 PostgreSQL 7.1 이후에 토토 캔되었습니다. 이것 때문에 거대한 변환 테이블이 필요하므로 기본적으로 활성화되지 않습니다. 이 기능을 활성화하려면 구성을 실행하십시오 --enable-unicode-conversion 옵션. 이것은 필요합니다 -enable-multibyte 옵션.
백엔드에 대해 euc_jp, latin1을 선택한다고 가정합니다. 프론트 엔드, 일부 일본인 캐릭터는 번역 할 수 없었습니다 라틴어로. 이 경우 표현할 수없는 서한 Latin1 문자 세트에서 :로 변환됩니다.
(Hexa Decimal)
이것은 다양한 종류에 대해 배우기 시작하기에 좋은 출처입니다. 인코딩 시스템의.
ftp : //ftp.ora.com/pub/examples/nutshell/ujip/cjk/cjk.infEUC_JP, EUC_CN, EUC_KR, EUC_TW에 대한 자세한 설명 섹션 3.2에 나타납니다.
유니 코드 :http : //www.unicode.org/홈페이지 유니 코드.
RFC 2044UTF-8이 정의되어 있습니다 여기.
2000 년 12 월 7 일 * 유니 코드와 기타 간 자동 인코딩 변환 인코딩이 구현됩니다 * 위의 변경 사항은 7.1에 나타납니다 2000 년 5 월 20 일 * SJIS UDC (NEC 선택 IBM KANJI) 토토 캔 기여 Eiji Tokuya에 의해 * 위의 변경 사항은 7.0.1에 나타납니다 2000 년 3 월 22 일 * 새로운 LIBPQ 함수 추가 PQSetClientEncoding, PQClientencoding을 추가하십시오 * ./configure-with-mb = euc_jp 이제 더 이상 사용되지 않았습니다. 사용 ./configure-enable-multibyte = euc_jp 대신에 * SQL_ASCII 회귀 테스트 케이스를 추가하십시오 * SJIS 사용자 정의 문자 (UDC) 토토 캔 추가 * 위의 모든 것은 7.0에 나타납니다 1999 년 7 월 11 일 * 클라이언트 인코딩으로 Win1250 (Windows Czech)에 대한 토토 캔 추가 (Pavel Behal에 의해 기여) * 일부 컴파일러 경고 수정 (Tomoaki Nishiyama에 의해 기여) 1999 년 3 월 23 일 * KOI8 (KOI8-R), WIN (CP1251), ALT (CP866)에 대한 토토 캔 추가 (테스트 해 주신 Oleg Broytmann에 감사드립니다) * MB 및 로케일의 문제를 해결하십시오 1999 년 1 월 26 일 * Fronend Encoding을 위해 BIG5에 대한 토토 캔을 추가하십시오 (big5를 사용하려면 EUC_TW로 데이터베이스를 작성해야합니다) * EUC_TW에 대한 회귀 테스트 사례를 추가하십시오 (Jonah Kuo에 의해 기여<jonahkuo@mail.ttn.com.tw) 1998 년 12 월 15 일 * SQL_ASCII 토토 캔과 관련된 버그가 고정되었습니다 1998 년 11 월 5 일 * 6.4 릴리스. 이 버전에서는 PG_DATABASE에 "인코딩"이 있습니다. 데이터베이스 인코딩을 나타내는 열입니다 1998 년 7 월 22 일 * 컴파일 시간 대신 InitDB/CreatedB에서 인코딩을 결정하십시오 * 사본 명령을 발행 할 때 pgclientencoding 토토 캔 * SQL92 구문 토토 캔 "이름 설정"토토 캔 * LATIN2-5 토토 캔 * 유니 코드 회귀 테스트 케이스를 추가하십시오 * MB의 새로운 테스트 스위트 * 소스 파일 정리 1998 년 6 월 5 일 * 백엔드 간 인코딩 번역에 대한 토토 캔 추가 그리고 프론트 엔드 * 새 명령 세트 client_encoding 등이 추가되었습니다 * LATIN1 문자 세트에 대한 토토 캔을 추가하십시오 * 8 비트 클린을 향상시킵니다 1998 년 4 월 21 일 일부 향상/수정 * 문자 _length (), position (), substring ()가 이제 알고 있습니다 다중 바이트 문자 * Octet_length () 추가 * 구성하려면 -with-MB 옵션을 추가하십시오 * EUC_KR에 대한 새로운 회귀 테스트 (곧 공헌 함)<hong@lunaris.hanmesoft.co.kr) * EUC_JP 회귀 테스트에 일부 테스트 사례 추가 * 회귀/회귀에서 문제를 해결합니다. System V의 경우. * 8 비트 숯을 처리하려면 toupper (), tolower ()를 수정하십시오 1998 년 3 월 25 일 MB PL2는 PostgreSQL 6.3.1에 통합됩니다. 1998 년 3 월 10 일 PL2 출시 * EUC_JP, euc_cn 및 mule_internal에 대한 회귀 테스트 추가 * 영어 문서 추가 (이 파일) * 8 비트 단일 바이트 문자에 관한 문제를 해결하십시오 1998 년 3 월 1 일 PL1 릴리스
Windows 클라이언트 플랫폼에서 설정된 Win1250 문자는 다음과 같습니다. 와 함께Postgres로케일 토토 캔 활성화.
다음은 명심해야합니다 :
성공은 적절한 시스템 로케일에 따라 다릅니다. 이것은 그랬습니다 CS_CZ.ISO8859-2로 RH6.0 및 Slackware 3.6으로 테스트 장소.
서버 Multibyte 데이터베이스 인코딩을 설정하지 마십시오 Win1250에. A가 없기 때문에 항상 latin2를 사용하십시오 Unix의 Win1250 로케일
Win1250 인코딩은 m $ w odbc 클라이언트에 대해서만 사용할 수 있습니다. 캐릭터는 즉시 다시 표시되어 표시됩니다. 제대로 저장되었습니다.
실행할 때 다음을 기억하는 것이 중요합니다.
이 구성은 정렬 순서에 따라 정렬 순서를 다시 표시합니다 당신의LC_x설정. 혼란스럽지 마십시오 사용하지 않기 때문에 회귀 테스트 결과 장소.
"와 같은 로케일ch"IS 시스템이 해당 로케일을 토토 캔하는 경우에만 올바르게 정렬되었습니다. 구형 시스템은 그렇게하지 않을 수 있습니다 (예 : RH6.0) 하다.
돈을 ' 삽입해야합니다.162,50' (안에 쉼표를 참고하십시오 단일 크기).
작성 당시 (1999 년 초),이 구성 광범위한 테스트를받지 못했습니다. 알려주세요 변경해야 할 변경!
Winder Windows/ODBC에서 Win1250
컴파일Postgres로케일 활성화 및 멀티 바이트 인코딩 설정latin2.
설치를 설정하십시오. 창조하는 것을 잊지 마십시오 프로필의 로케일 변수 (환경). 을 위한 예제 (이것은 정확하지 않을 수 있습니다Your환경) :
lc_all = cs_cz.iso8859-2 lc_collate = cs_cz.iso8859-2 lc_ctype = cs_cz.iso8859-2 lc_monetary = cs_cz.iso8859-2 lc_numeric = cs_cz.iso8859-2 lc_time = cs_cz.iso8859-2
당신은 로컬 세트로 우체국 장을 시작해야합니다!
체코 언어로 시도하고 질문.
M $ Windows에서 PGSQL 용 ODBC 드라이버를 설치하십시오 기계.
데이터 소스를 올바르게 설정합니다. 이 라인을 포함하십시오 필드의 ODBC 구성 대화 상자설정 연결:
set client_encoding = 'win1250';
이제 다시 시도하지만 ODBC가있는 Windows에서