캐릭터 세트 지원PostgreSQLISO 8859 시리즈와 같은 단일 바이트 문자 토토 꽁 머니 및과 같은 단일 바이트 문자 토토 꽁 머니를 포함하여 다양한 문자 토토 꽁 머니 (인코딩이라고도 함)에 텍스트를 저장할 수 있습니다.euc(확장 UNIX 코드), UTF-8 및 뮬 내부 코드. 모든 지원되는 문자 토토 꽁 머니는 클라이언트가 투명하게 사용할 수 있지만 몇 가지는 서버 내에서 사용하기 위해 지원되지 않습니다 (즉, 서버 측 인코딩). 기본 문자 토토 꽁 머니는 초기화하는 동안 선택됩니다PostgreSQL데이터베이스 클러스터 사용initdb
. 데이터베이스를 만들 때 재정의 할 수 있으므로 다른 문자 토토 꽁 머니가 다른 여러 데이터베이스를 가질 수 있습니다..
중요한 제한은 각 데이터베이스의 문자 토토 꽁 머니가 데이터베이스와 호환되어야한다는 것입니다.LC_CTYPE
(캐릭터 분류) 및LC_COLLATE
(문자열 정렬 순서) 로케일 설정. 을 위한C
또는posix
로케일, 모든 문자 토토 꽁 머니가 허용되지만 다른 LIBC가 제공 한 로케일의 경우 올바르게 작동하는 문자 토토 꽁 머니는 하나뿐입니다. (그러나 Windows에서는 UTF-8 인코딩을 모든 로케일과 함께 사용할 수 있습니다.) ICU 지원이 구성된 경우 ICU 제공된 로케일은 대부분의 서버 측 인코딩과 함께 사용할 수 있습니다..
표 23.1PostgreSQL.
표 23.1. PostgreSQL문자 토토 꽁 머니
이름 | 설명 | 언어 | 서버? | ICU? | 바이트/char | 별칭 |
---|---|---|---|---|---|---|
big5 |
Big Five | 전통 중국어 | 아니오 | 아니오 | 1-2 | Win950 , Windows950 |
EUC_CN |
확장 UNIX 코드 -CN | 단순화 된 중국어 | 예 | 예 | 1-3 | |
EUC_JP |
확장 UNIX 코드 -JP | 일본어 | 예 | 예 | 1-3 | |
euc_jis_2004 |
확장 UNIX Code-JP, JIS X 0213 | 일본어 | 예 | 아니오 | 1-3 | |
EUC_KR |
확장 유닉스 코드 -KR | 한국어 | 예 | 예 | 1-3 | |
EUC_TW |
확장 UNIX Code-TW | 전통 중국어, 대만 | 예 | 예 | 1-3 | |
GB18030 |
국가 표준 | 중국어 | 아니오 | 아니오 | 1-4 | |
GBK |
확장 된 국가 표준 | 단순화 된 중국어 | 아니오 | 아니오 | 1-2 | Win936 , Windows936 |
ISO_8859_5 |
ISO 8859-5,ECMA 113 | 라틴/사이릴 | 예 | 예 | 1 | |
ISO_8859_6 |
ISO 8859-6,ecma 114 | 라틴/아랍어 | 예 | 예 | 1 | |
ISO_8859_7 |
ISO 8859-7,ecma 118 | 라틴/그리스어 | 예 | 예 | 1 | |
ISO_8859_8 |
ISO 8859-8,ecma 121 | 라틴/히브리어 | 예 | 예 | 1 | |
Johab |
Johab | 한국 (Hangul) | 아니오 | 아니요 | 1-3 | |
Koi8R |
Koi8-r | 사이릴 릭 (러시아어) | 예 | 예 | 1 | KOI8 |
Koi8U |
Koi8-U | 키릴 릭 (우크라이나) | 예 | 예 | 1 | |
latin1 |
ISO 8859-1,ecma 94 | 서유럽 | 예 | 예 | 1 | ISO88591 |
latin2 |
ISO 8859-2,ecma 94 | 중앙 유럽 | 예 | 예 | 1 | ISO88592 |
latin3 |
ISO 8859-3,ecma 94 | 남부 유럽 | 예 | 예 | 1 | ISO88593 |
latin4 |
ISO 8859-4,ecma 94 | 북유럽 | 예 | 예 | 1 | ISO88594 |
latin5 |
ISO 8859-9,ecma 128 | 터키 | 예 | 예 | 1 | ISO88599 |
latin6 |
ISO 8859-10,ECMA 144 | Nordic | 예 | 예 | 1 | ISO885910 |
latin7 |
ISO 8859-13 | Baltic | 예 | 예 | 1 | ISO885913 |
latin8 |
ISO 8859-14 | Celtic | 예 | 예 | 1 | ISO885914 |
latin9 |
ISO 8859-15 | 유로 및 악센트가있는 Latin1 | 예 | 예 | 1 | ISO885915 |
latin10 |
ISO 8859-16,asroSR 14111 | 루마니아어 | 예 | 아니오 | 1 | ISO885916 |
mule_internal |
뮬 내부 코드 | 다국어 EMACS | 예 | 아니오 | 1-4 | |
SJIS |
Shift JIS | 일본어 | 아니오 | 아니오 | 1-2 | MSKANJI , Shiftjis , Win932 , Windows932 |
shift_jis_2004 |
Shift JIS, JIS X 0213 | 일본어 | 아니오 | 아니오 | 1-2 | |
SQL_ASCII |
지정되지 않은 (텍스트 참조) | Any | 예 | 아니오 | 1 | |
UHC |
Unified Hangul 코드 | 한국어 | 아니오 | 아니오 | 1-2 | Win949 , Windows949 |
UTF8 |
유니 코드, 8 비트 | all | 예 | 예 | 1-4 | 유니 코드 |
Win866 |
Windows CP866 | Cyrillic | 예 | 예 | 1 | alt |
Win874 |
Windows CP874 | 타이 | 예 | 아니오 | 1 | |
Win1250 |
Windows CP1250 | 중앙 유럽 | 예 | 예 | 1 | |
Win1251 |
Windows CP1251 | Cyrillic | 예 | 예 | 1 | WIN |
Win1252 |
Windows CP1252 | 서유럽 | 예 | 예 | 1 | |
Win1253 |
Windows CP1253 | Greek | 예 | 예 | 1 | |
Win1254 |
Windows CP1254 | 터키 | 예 | 예 | 1 | |
Win1255 |
Windows CP1255 | 히브리어 | 예 | 예 | 1 | |
Win1256 |
Windows CP1256 | 아랍어 | 예 | 예 | 1 | |
Win1257 |
Windows CP1257 | Baltic | 예 | 예 | 1 | |
Win1258 |
Windows CP1258 | 베트남 | 예 | 예 | 1 | ABC , TCVN , TCVN5712 , VSCII |
모든 클라이언트는 아닙니다APIS를 지원합니다. 예를 들어,PostgreSQLJDBC 드라이버는 지원하지 않습니다mule_internal
, latin6
, latin8
및latin10
.
theSQL_ASCII
설정은 다른 설정과 상당히 다르게 작동합니다. 서버 문자 토토 꽁 머니가있을 때SQL_ASCII
, 서버는 ASCII 표준에 따라 바이트 값 0-127을 해석하는 반면 바이트 값 128-255는 해석되지 않은 문자로 간주됩니다. 설정이있을 때 인코딩 변환이 수행되지 않습니다SQL_ASCII
. 따라서이 설정은 인코딩에 대한 무지 선언으로 특정 인코딩이 사용되는 선언이 아닙니다. 대부분의 경우 ASCII가 아닌 데이터를 사용하는 경우 사용하는 것은 현명하지 않습니다.SQL_ASCII
설정PostgreSQL비 ASCII 문자를 변환하거나 검증하여 도움을 줄 수 없습니다.
initdb
a의 기본 문자 토토 꽁 머니 (인코딩)를 정의합니다.PostgreSQL클러스터. 예를 들어,
initdb -e euc_jp
기본 문자를 설정합니다.EUC_JP
(일본어의 확장 유닉스 코드). 사용할 수 있습니다-encoding
대신-e
더 긴 옵션 문자열을 선호하는 경우. 그렇지 않은 경우-e
또는-encoding
옵션이 제공됩니다,initdb
지정된 또는 기본 로케일을 기반으로 사용할 적절한 인코딩을 결정하려고 시도합니다.
인코딩이 선택한 로케일과 호환되는 경우 데이터베이스 생성 시간에 비 디퍼 컬 인코딩을 지정할 수 있습니다..
createb -e euc_kr -t template0 ---lc -collate = ko_kr.euckr ---lc-ctype = ko_kr.euckr korean
이것은 이름이 지정된 데이터베이스를 만듭니다한국어
문자 토토 꽁 머니를 사용하는EUC_KR
및 로케일KO_KR
. 이것을 달성하는 또 다른 방법은이 SQL 명령을 사용하는 것입니다 :
'euc_kr'lc_collate = 'ko_kr.euckr'lc_ctype = 'ko_kr.euckr'template = template0; 인코딩하여 데이터베이스 한국어를 만듭니다.
위 명령에 복사를 지정하는지Template0
데이터베이스. 다른 데이터베이스를 복사 할 때 인코딩 및 로케일 설정은 소스 데이터베이스의 설정에서 변경할 수 없습니다. 이로 인해 데이터가 손상 될 수 있습니다. 자세한 내용은 참조섹션 22.3.
데이터베이스 인코딩은 시스템 카탈로그에 저장됩니다PG_DATABASE
. 를 사용하여 볼 수 있습니다.PSQL
-l
옵션 또는\ l
명령.
$PSQL -L
데이터베이스 목록
이름 | 소유자 | 인코딩 | Collation | CType | 액세스 권한
-----------+----------+-----------+-------------+-------------+-------------------------------------
clocaledb | Hlinnaka | SQL_ASCII | C | C |
EnglishDB | Hlinnaka | UTF8 | en_gb.utf8 | en_gb.utf8 |
일본어 | Hlinnaka | UTF8 | ja_jp.utf8 | ja_jp.utf8 |
한국 | Hlinnaka | euc_kr | ko_kr.euckr | ko_kr.euckr |
Postgres | Hlinnaka | UTF8 | fi_fi.utf8 | fi_fi.utf8 |
템플릿 0 | Hlinnaka | UTF8 | fi_fi.utf8 | fi_fi.utf8 | = c/hlinnaka, hlinnaka = ctc/hlinnaka
템플릿 1 | Hlinnaka | UTF8 | fi_fi.utf8 | fi_fi.utf8 | = c/hlinnaka, hlinnaka = ctc/hlinnaka
대부분의 현대 운영 체제에서PostgreSQLLC_CTYPE
설정, 일치하는 데이터베이스 인코딩 만 사용되도록 시행됩니다. 이전 시스템에서 선택한 로케일에서 예상되는 인코딩을 사용하는 것은 귀하의 책임입니다. 이 분야의 실수는 정렬과 같은 로케일 의존적 작업의 이상한 행동으로 이어질 수 있습니다.
PostgreSQLSuperuser가와 함께 데이터베이스를 만들 수 있습니다.SQL_ASCII
언제도 인코딩LC_CTYPE
C
또는posix
. 위에서 언급했듯이SQL_ASCII
데이터베이스에 저장된 데이터에 특정 인코딩이 있음을 시행하지 않으므로이 선택은 로케일 의존적 오해의 위험을 초래합니다. 이 설정 조합을 사용하면 더 이상 사용되지 않으며 언젠가는 금지 될 수 있습니다.
PostgreSQL특정 문자 토토 꽁 머니 조합에 대해 서버와 클라이언트 간의 자동 문자 토토 꽁 머니 전환을 지원합니다. 변환 정보는에 저장됩니다.PG_CONVERSION
시스템 카탈로그.PostgreSQL에 표시된대로 사전 정의 된 변환이 제공됩니다.표 23.2. SQL 명령을 사용하여 새 변환을 만들 수 있습니다변환 생성
.
표 23.2. 클라이언트/서버 문자 토토 꽁 머니 변환
서버 문자 토토 꽁 머니 | 사용 가능한 클라이언트 문자 토토 꽁 머니 |
---|---|
big5 |
서버 인코딩으로 지원되지 않음 |
EUC_CN |
EUC_CN, mule_internal , UTF8 |
EUC_JP |
EUC_JP, mule_internal , SJIS , UTF8 |
euc_jis_2004 |
EUC_JIS_2004, shift_jis_2004 , UTF8 |
EUC_KR |
EUC_KR, mule_internal , UTF8 |
EUC_TW |
EUC_TW, big5 , mule_internal , UTF8 |
GB18030 |
서버 인코딩으로 지원되지 않음 |
GBK |
서버 인코딩으로 지원되지 않음 |
ISO_8859_5 |
ISO_8859_5, KOI8R , mule_internal , UTF8 , Win866 , Win1251 |
ISO_8859_6 |
ISO_8859_6, UTF8 |
ISO_8859_7 |
ISO_8859_7, UTF8 |
ISO_8859_8 |
ISO_8859_8, UTF8 |
Johab |
서버 인코딩으로 지원되지 않음 |
Koi8R |
Koi8R, ISO_8859_5 , mule_internal , UTF8 , Win866 , Win1251 |
Koi8U |
Koi8U, UTF8 |
latin1 |
latin1, mule_internal , UTF8 |
latin2 |
latin2, mule_internal , UTF8 , Win1250 |
latin3 |
latin3, mule_internal , UTF8 |
latin4 |
latin4, mule_internal , UTF8 |
latin5 |
latin5, UTF8 |
latin6 |
latin6, UTF8 |
latin7 |
latin7, UTF8 |
latin8 |
latin8, UTF8 |
latin9 |
latin9, UTF8 |
latin10 |
latin10, UTF8 |
mule_internal |
mule_internal, big5 , EUC_CN , EUC_JP , EUC_KR , EUC_TW , ISO_8859_5 , KOI8R , latin1 tolatin4 , SJIS , Win866 , Win1250 , Win1251 |
SJIS |
서버 인코딩으로 지원되지 않음 |
shift_jis_2004 |
서버 인코딩으로 지원되지 않음 |
SQL_ASCII |
Any (변환 없음) |
UHC |
서버 인코딩으로 지원되지 않음 |
UTF8 |
모든 지원되는 인코딩 |
Win866 |
Win866, ISO_8859_5 , Koi8R , mule_internal , UTF8 , Win1251 |
Win874 |
Win874, UTF8 |
Win1250 |
Win1250, latin2 , mule_internal , UTF8 |
Win1251 |
Win1251, ISO_8859_5 , KOI8R , mule_internal , UTF8 , Win866 |
Win1252 |
Win1252, UTF8 |
Win1253 |
Win1253, UTF8 |
Win1254 |
Win1254, UTF8 |
Win1255 |
Win1255, UTF8 |
Win1256 |
Win1256, UTF8 |
Win1257 |
Win1257, UTF8 |
Win1258 |
Win1258, UTF8 |
자동 문자 토토 꽁 머니 변환을 활성화하려면 말해야합니다PostgreSQL클라이언트에서 사용하려는 문자 토토 꽁 머니 (인코딩). 이것을 달성하는 몇 가지 방법이 있습니다 :
사용\ encoding
명령PSQL. \ encoding
클라이언트 인코딩을 즉시 변경할 수 있습니다. 예를 들어 인코딩을로 변경하려면SJIS
, 유형 :
\ sjis 인코딩
libpq(스포츠 토토 : 문서 : 12 : 33.10. 제어 기능) 클라이언트 인코딩을 제어하는 기능이 있습니다.
사용set client_encoding to
. 이 SQL 명령으로 클라이언트 인코딩 설정을 수행 할 수 있습니다.
client_encoding set client_encoding to 'value
';
표준 SQL 구문을 사용할 수 있습니다이름 설정
이 목적은 :
이름 설정 'value
';
현재 클라이언트 인코딩 쿼리 :
show client_encoding;
기본 인코딩으로 돌아 가기 :
Reset Client_Encoding;
사용pgclientencoding
. 환경 변수 인 경우pgclientencoding
클라이언트의 환경에서 정의되어 있으며, 해당 클라이언트 인코딩은 서버에 대한 연결이 이루어질 때 자동으로 선택됩니다. (위에서 언급 한 다른 방법 중 하나를 사용하여 이후에 재정의 할 수 있습니다.)
구성 변수 사용client_encoding. 인 경우client_encoding
변수가 설정되어 있으며 서버에 대한 연결이 이루어질 때 클라이언트 인코딩이 자동으로 선택됩니다. (위에서 언급 한 다른 방법 중 하나를 사용하여 이후에 재정의 할 수 있습니다.)
특정 캐릭터의 변환이 불가능한 경우 - 선택했다고 가정 해EUC_JP
서버 및latin1
클라이언트의 경우, 일부 일본 문자가 반환됩니다.latin1
- 오류 가보고되었습니다.
클라이언트 문자 토토 꽁 머니가로 정의 된 경우SQL_ASCII
, 서버의 문자 토토 꽁 머니에 관계없이 인코딩 변환이 비활성화됩니다. 서버와 마찬가지로 사용SQL_ASCII
All-ASCII 데이터를 사용하지 않는 한 현명하지 않습니다.
이것은 다양한 종류의 인코딩 시스템에 대해 배우기 시작하기에 좋은 출처입니다.
에 대한 자세한 설명을 포함합니다EUC_JP
, EUC_CN
, EUC_KR
, EUC_TW
.
유니 코드 컨소시엄의 웹 사이트.
UTF-8 (8 비트 UCS/유니 코드 변환 형식)은 여기에 정의되어 있습니다.