23.3. 캐릭터 세트 지원#

캐릭터가 지원을 설정하는 캐릭터PostgreSQLISO 8859 시리즈와 같은 단일 바이트 문자 롤 토토 및와 같은 단일 바이트 문자 롤 토토를 포함하여 다양한 문자 롤 토토 (인코딩이라고도 함)에 텍스트를 저장할 수 있습니다.EUC(확장 UNIX 코드), UTF-8 및 노새 내부 코드. 모든 지원되는 문자 롤 토토는 클라이언트가 투명하게 사용할 수 있지만 몇 가지는 서버 내에서 사용하기 위해 지원되지 않습니다 (즉, 서버 측 인코딩). 기본 문자 롤 토토는 초기화하는 동안 선택됩니다postgresql데이터베이스 클러스터 사용initdb. 데이터베이스를 만들 때 재정의 할 수 있으므로 다른 문자 롤 토토가 다른 여러 데이터베이스를 가질 수 있습니다..

중요한 제한은 각 데이터베이스의 문자 롤 토토가 데이터베이스와 호환되어야한다는 것입니다.LC_CTYPE(캐릭터 분류) 및LC_COLLATE(문자열 정렬 순서) 로케일 설정. 을 위한C또는posix로케일, 모든 문자 롤 토토가 허용되지만 다른 LIBC가 제공 한 로케일의 경우 올바르게 작동하는 문자 롤 토토 만 있습니다. (그러나 Windows에서는 UTF-8 인코딩을 모든 로케일과 함께 사용할 수 있습니다.) ICU 지원이 구성된 경우 ICU 제공된 로케일은 대부분의 서버 측 인코딩과 함께 사용할 수 있습니다..

23.3.1. 지원되는 문자 롤 토토#

표 23.3PostgreSQL.

표 23.3. PostgreSQL문자 롤 토토

이름 설명 언어 서버? ICU? 바이트/char 별칭
big5 Big Five 전통 중국어 아니오 아니오 1–2 Win950, Windows950
euc_cn 확장 유닉스 코드 -CN 단순화 된 중국어 1–3
EUC_JP 확장 유닉스 코드 -JP 일본어 1–3
euc_jis_2004 확장 UNIX Code-JP, JIS X 0213 일본어 아니오 1–3
EUC_KR 확장 UNIX 코드 -KR 한국어 1–3
EUC_TW 확장 UNIX Code-TW 전통 중국어, 대만 1–4
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 South European 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 사이릴 릭 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, latin8latin10.

theSQL_ASCII설정은 다른 설정과 상당히 다르게 작동합니다. 서버 문자 롤 토토가있을 때SQL_ASCII, 서버는 ASCII 표준에 따라 바이트 값 0–127을 해석하는 반면 바이트 값 128–255는 해석되지 않은 문자로 간주됩니다. 설정이있을 때 인코딩 변환이 수행되지 않습니다SQL_ASCII. 따라서이 설정은 인코딩에 대한 무지 선언으로 특정 인코딩이 사용되는 선언이 아닙니다. 대부분의 경우 ASCII가 아닌 데이터를 사용하는 경우 사용하는 것은 현명하지 않습니다.SQL_ASCII설정 때문에PostgreSQLASCII가 아닌 문자를 변환하거나 검증하여 도움을 줄 수 없습니다.

23.3.2. 문자 롤 토토 설정#

initdba의 기본 문자 롤 토토 (인코딩)를 정의합니다.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데이터베이스. 다른 데이터베이스를 복사 할 때 인코딩 및 로케일 설정은 소스 데이터베이스의 설정에서 변경할 수 없습니다. 이로 인해 데이터가 손상 될 수 있습니다. 자세한 내용은 참조PostgreSQL : 문서 : 17 : 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설정, 일치하는 데이터베이스 인코딩 만 사용되도록 시행됩니다. 이전 시스템에서 선택한 로케일에서 예상되는 인코딩을 사용하는 것은 귀하의 책임입니다. 이 분야의 실수는 정렬과 같은 로케일 의존적 작업의 이상한 행동으로 이어질 수 있습니다.

PostgreSQL슈퍼업자가로 데이터베이스를 만들 수 있습니다.SQL_ASCII언제도 인코딩LC_CTYPEC또는posix. 위에서 언급했듯이SQL_ASCII데이터베이스에 저장된 데이터에 특정 인코딩이 있음을 시행하지 않으므로이 선택은 로케일 의존적 오해의 위험을 초래합니다. 이 설정 조합을 사용하면 더 이상 사용되지 않으며 언젠가는 금지 될 수 있습니다.

23.3.3. 자동 문자 서버와 클라이언트 간의 변환#

PostgreSQL지원 캐릭터 세트의 많은 조합에 대해 서버와 클라이언트 간의 자동 문자 롤 토토 지원 (섹션 23.3.4어떤 것들을 보여줍니다).

자동 문자 롤 토토 변환을 활성화하려면 말해야합니다PostgreSQL클라이언트에서 사용하려는 문자 롤 토토 (인코딩). 이것을 달성하는 몇 가지 방법이 있습니다 :

  • 사용\ encoding명령PSQL. \ encoding클라이언트 인코딩을 즉시 변경할 수 있습니다. 예를 들어 인코딩을로 변경하려면SJIS, 유형 :

    \ sjis 인코딩
  • libpq(스포츠 토토 사이트 : 문서 : 17 : 32.11. 제어 기능) 클라이언트 인코딩을 제어하는 ​​기능이 있습니다.

  • 사용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, 서버는 들어오는 데이터가 해당 인코딩에 유효한지 확인합니다. 따라서 순 효과는 클라이언트 문자 롤 토토가 서버와 동일합니다.) 서버와 마찬가지로SQL_ASCIIAll-ASCII 데이터를 사용하지 않는 한 현명하지 않습니다.

23.3.4. 사용 가능한 문자 롤 토토 변환#

PostgreSQL변환 함수가 나열된 두 문자 롤 토토 사이의 변환을 허용PG_CONVERSION시스템 카탈로그.PostgreSQL에 요약 된 바와 같이 사전 정의 된 변환이 제공됩니다표 23.4표 23.5. SQL 명령을 사용하여 새 변환을 만들 수 있습니다변환 생성. (자동 클라이언트/서버 변환에 사용하려면 변환이로 표시되어야합니다.기본값캐릭터 롤 토토 쌍의 경우)

표 23.4. 내장 클라이언트/서버 문자 롤 토토 변환

서버 문자 롤 토토 사용 가능한 클라이언트 문자 롤 토토
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, latin1tolatin4, 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

표 23.5. 모든 내장 문자 롤 토토 변환

변환 이름[A] 소스 인코딩 대상 인코딩
big5_to_euc_tw big5 EUC_TW
big5_to_mic big5 mule_internal
big5_to_utf8 big5 UTF8
euc_cn_to_mic EUC_CN mule_internal
euc_cn_to_utf8 euc_cn UTF8
EUC_JP_TO_MIC EUC_JP mule_internal
euc_jp_to_sjis EUC_JP SJIS
euc_jp_to_utf8 EUC_JP UTF8
EUC_KR_TO_MIC EUC_KR mule_internal
euc_kr_to_utf8 EUC_KR UTF8
euc_tw_to_big5 EUC_TW big5
euc_tw_to_mic EUC_TW mule_internal
euc_tw_to_utf8 EUC_TW UTF8
GB18030_TO_UTF8 GB18030 UTF8
gbk_to_utf8 GBK UTF8
ISO_8859_10_TO_UTF8 latin6 UTF8
ISO_8859_13_TO_UTF8 latin7 UTF8
ISO_8859_14_TO_UTF8 latin8 UTF8
ISO_8859_15_TO_UTF8 latin9 UTF8
ISO_8859_16_TO_UTF8 latin10 UTF8
ISO_8859_1_TO_MIC latin1 mule_internal
ISO_8859_1_TO_UTF8 latin1 UTF8
ISO_8859_2_TO_MIC latin2 mule_internal
ISO_8859_2_TO_UTF8 latin2 UTF8
iso_8859_2_to_windows_1250 latin2 Win1250
ISO_8859_3_TO_MIC latin3 mule_internal
ISO_8859_3_TO_UTF8 latin3 UTF8
ISO_8859_4_TO_MIC latin4 mule_internal
ISO_8859_4_TO_UTF8 latin4 UTF8
ISO_8859_5_TO_KOI8_R ISO_8859_5 KOI8R
ISO_8859_5_TO_MIC ISO_8859_5 mule_internal
ISO_8859_5_TO_UTF8 ISO_8859_5 UTF8
iso_8859_5_to_windows_1251 ISO_8859_5 ​​Win1251
iso_8859_5_to_windows_866 ISO_8859_5 Win866
ISO_8859_6_TO_UTF8 ISO_8859_6 UTF8
ISO_8859_7_TO_UTF8 ISO_8859_7 UTF8
ISO_8859_8_TO_UTF8 ISO_8859_8 UTF8
ISO_8859_9_TO_UTF8 latin5 UTF8
johab_to_utf8 Johab UTF8
KOI8_R_TO_SO_ISO_8859_5 KOI8R ISO_8859_5
KOI8_R_TO_MIC KOI8R mule_internal
KOI8_R_TO_UTF8 Koi8R UTF8
KOI8_R_TO_WINDOWS_1251 Koi8R Win1251
KOI8_R_TO_WINDOWS_866 KOI8R Win866
KOI8_U_TO_UTF8 Koi8U UTF8
MIC_TO_BIG5 mule_internal BIG5
MIC_TO_EUC_CN mule_internal EUC_CN
MIC_TO_EUC_JP mule_internal EUC_JP
MIC_TO_EUC_KR mule_internal EUC_KR
MIC_TO_EUC_TW mule_internal EUC_TW
MIC_TO_ISO_8859_1 mule_internal latin1
MIC_TO_ISO_8859_2 mule_internal latin2
MIC_TO_ISO_8859_3 mule_internal latin3
MIC_TO_ISO_8859_4 mule_internal latin4
MIC_TO_ISO_8859_5 mule_internal ISO_8859_5
MIC_TO_KOI8_R mule_internal Koi8R
MIC_TO_SJIS mule_internal SJIS
MIC_TO_WINDOWS_1250 mule_internal Win1250
MIC_TO_WINDOWS_1251 mule_internal Win1251
mic_to_windows_866 mule_internal Win866
sjis_to_euc_jp SJIS EUC_JP
sjis_to_mic SJIS mule_internal
sjis_to_utf8 sjis UTF8
Windows_1258_TO_UTF8 Win1258 UTF8
uhc_to_utf8 UHC UTF8
UTF8_TO_BIG5 UTF8 big5
UTF8_TO_EUC_CN UTF8 EUC_CN
UTF8_TO_EUC_JP UTF8 EUC_JP
UTF8_TO_EUC_KR UTF8 EUC_KR
UTF8_TO_EUC_TW UTF8 EUC_TW
UTF8_TO_GB18030 UTF8 GB18030
UTF8_TO_GBK UTF8 gbk
UTF8_TO_ISO_8859_1 UTF8 latin1
UTF8_TO_ISO_8859_10 UTF8 latin6
UTF8_TO_ISO_8859_13 UTF8 latin7
UTF8_TO_ISO_8859_14 UTF8 latin8
UTF8_TO_ISO_8859_15 UTF8 latin9
UTF8_TO_ISO_8859_16 UTF8 latin10
UTF8_TO_ISO_8859_2 UTF8 latin2
UTF8_TO_ISO_8859_3 UTF8 latin3
UTF8_TO_ISO_8859_4 UTF8 latin4
UTF8_TO_ISO_8859_5 UTF8 ISO_8859_5
UTF8_TO_ISO_8859_6 UTF8 ISO_8859_6
UTF8_TO_ISO_8859_7 UTF8 ISO_8859_7
UTF8_TO_ISO_8859_8 UTF8 ISO_8859_8
UTF8_TO_ISO_8859_9 UTF8 latin5
UTF8_TO_JOHAB UTF8 Johab
UTF8_TO_KOI8_R UTF8 Koi8R
UTF8_TO_KOI8_U UTF8 Koi8U
UTF8_TO_SJIS UTF8 SJIS
UTF8_TO_WINDOWS_1258 UTF8 Win1258
UTF8_TO_UHC UTF8 UHC
UTF8_TO_WINDOWS_1250 UTF8 Win1250
UTF8_TO_WINDOWS_1251 UTF8 Win1251
UTF8_TO_WINDOWS_1252 UTF8 Win1252
UTF8_TO_WINDOWS_1253 UTF8 Win1253
UTF8_TO_WINDOWS_1254 UTF8 Win1254
UTF8_TO_WINDOWS_1255 UTF8 Win1255
UTF8_TO_WINDOWS_1256 UTF8 Win1256
UTF8_TO_WINDOWS_1257 UTF8 Win1257
UTF8_TO_WINDOWS_866 UTF8 Win866
UTF8_TO_WINDOWS_874 UTF8 Win874
Windows_1250_TO_ISO_8859_2 win1250 latin2
Windows_1250_TO_MIC Win1250 mule_internal
Windows_1250_TO_UTF8 Win1250 UTF8
Windows_1251_TO_SO_ISO_8859_5 Win1251 ISO_8859_5
Windows_1251_TO_KOI8_R Win1251 KOI8R
Windows_1251_TO_MIC Win1251 mule_internal
Windows_1251_TO_UTF8 Win1251 UTF8
Windows_1251_TO_WINDOWS_866 Win1251 Win866
Windows_1252_TO_UTF8 Win1252 UTF8
Windows_1256_TO_UTF8 Win1256 UTF8
Windows_866_TO_SO_8859_5 Win866 ISO_8859_5
Windows_866_TO_KOI8_R Win866 Koi8R
Windows_866_TO_MIC Win866 mule_internal
Windows_866_TO_UTF8 Win866 UTF8
Windows_866_TO_WINDOWS_1251 Win866 WIN
Windows_874_TO_UTF8 Win874 UTF8
EUC_JIS_2004_TO_UTF8 EUC_JIS_2004 UTF8
UTF8_TO_EUC_JIS_2004 UTF8 euc_jis_2004
shift_jis_2004_to_utf8 shift_jis_2004 UTF8
UTF8_TO_SHIFT_JIS_2004 UTF8 shift_jis_2004
EUC_JIS_2004_TO_SHIFT_JIS_2004 euc_jis_2004 shift_jis_2004
shift_jis_2004_to_euc_jis_2004 shift_jis_2004 euc_jis_2004

[a]변환 이름은 표준 이름 지정 체계를 따릅니다._to_, 유사하게 처리 된 대상 인코딩 이름이 뒤 따릅니다. 따라서이 이름은 때때로에 표시된 관례 인코딩 이름에서 벗어납니다.표 23.3.


23.3.5. 추가 읽기#

이것은 다양한 종류의 인코딩 시스템에 대해 배우기 시작하기에 좋은 출처입니다.

CJKV 정보 처리 : 중국어, 일본어, 한국 및 베트남 컴퓨팅

에 대한 자세한 설명을 포함합니다EUC_JP, EUC_CN, EUC_KR, EUC_TW.

https : //www.unicode.org/

유니 코드 컨소시엄의 웹 사이트.

RFC 3629

UTF-8 (8 비트 UCS/유니 코드 변환 형식)은 여기에 정의되어 있습니다.

제출

문서에 올바른 것이 없다면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면