20.2. Support des jeux de caract�res

Le support des jeux de caract�res dans PostgreSQL vous permet de rentrer du texte dans plusieurs jeux de caract�res, dont des jeux de caract�res � un octet tels que la s�rie ISO 8859 et des jeux de caract�res multi-octets tel que EUC (Extended Unix Code), Unicode et le code interne de Mule. Tous les jeux de caract�res peuvent �tre utilis�s de fa�on transparente au travers du serveur. (Si vous utilisez des fonctions d'extension d'autres sources, cela d�pend de la qualit� du code.) Le jeu de caract�res par d�faut est s�lectionn� pendant l'initialisation de votre cluster de base de donn�es PostgreSQL avec initdb. Le choix peut �tre outrepass� lorsqu'on cr�e une base de donn�es en utilisant createdb ou en utilisant la commande SQL CREATE DATABASE. Vous pouvez donc avoir de multiples bases chacune avec un jeux de caract�res diff�rents.

20.2.1. Jeux de Caract�res Support�s

Le Tableau 20-1 montre les jeux de caract�res disponibles � l'utilisation sur le serveur.

Tableau 20-1. Jeux de Caract�res Serveur

NomDescription
SQL_ASCIIASCII
EUC_JPJaponais EUC
EUC_CNChinois EUC
EUC_KRCor�en EUC
JOHABCor�en EUC (base Hangle)
EUC_TWTaiwanais EUC
UNICODEUnicode (UTF-8)
MULE_INTERNALCode interne de Mule
LATIN1ISO 8859-1/ECMA 94 (Alaphabet latin no.1)
LATIN2ISO 8859-2/ECMA 94 (Alaphabet latin no.2)
LATIN3ISO 8859-3/ECMA 94 (Alaphabet latin no.3)
LATIN4ISO 8859-4/ECMA 94 (Alaphabet latin no.4)
LATIN5ISO 8859-9/ECMA 128 (Alaphabet latin no.5)
LATIN6ISO 8859-10/ECMA 144 (Alaphabet latin no.6)
LATIN7ISO 8859-13 (Alaphabet latin no.7)
LATIN8ISO 8859-14 (Alaphabet latin no.8)
LATIN9ISO 8859-15 (Alaphabet latin no.9)
LATIN10ISO 8859-16/ASRO SR 14111 (Alaphabet latin no.10)
ISO_8859_5ISO 8859-5/ECMA 113 (Latin/Cyrillique)
ISO_8859_6ISO 8859-6/ECMA 114 (Latin/Arabe)
ISO_8859_7ISO 8859-7/ECMA 118 (Latin/Greque)
ISO_8859_8ISO 8859-8/ECMA 121 (Latin/Hebrew)
KOI8KOI8-R(U)
WINWindows CP1251
ALTWindows CP866
WIN1256Windows CP1256 (Arabic)
TCVNTCVN-5712/Windows CP1258 (Vietnamien)
WIN874Windows CP874 (Thai)

Important�: Avant PostgreSQL 7.2, LATIN5 signifiait, � tort, ISO 8859-5. A partir de 7.2, LATIN5 signifie ISO 8859-9. Si vous avez une base LATIN5 cr��e sur une version 7.1 ou ant�rieure et vous voulez migrer vers 7.2 ou une version plus r�cente, vous devriez faire attention � ce changement.

Tout les APIs ne supportent pas les jeux de caract�res de la liste. Par exemple, le pilot JDBC de PostgreSQL ne supporte pas MULE_INTERNAL, LATIN6, LATIN8 et LATIN10.

20.2.2. Choisir le Jeu de Caract�res

initdb d�finit le jeu de caract�res par d�faut pour un cluster PostgreSQL. Par exemple,

initdb -E EUC_JP

param�tre le jeu de caract�res (codage) � EUC_JP (Extended Unix Code for Japanese). Vous pouvez utiliser l'option --encoding au lieu de -E si vous pr�f�rez saisir les noms d'options longs. Si aucune option -E ou --encoding n'est donn�e, SQL_ASCII est utilis�.

Vous pouvez cr�er une base de donn�es avec un jeu de caract�re diff�rent:

createdb -E EUC_KR korean

Ceci va cr�er une base de donn�es appel�e korean qui utilisera le jeu de caract�re EUC_KR. Un autre moyen de r�aliser ceci est d'utiliser cette commande SQL :

CREATE DATABASE korean WITH ENCODING 'EUC_KR';

L'encodage pour une base de donn�es est conserv� dans le catalogue syst�me pg_database. Vous pouvez voir ceci en utilisant l'option -l ou la commande \l de psql.

$ psql -l
            List of databases
   Database    |  Owner  |   Encoding    
---------------+---------+---------------
 euc_cn        | t-ishii | EUC_CN
 euc_jp        | t-ishii | EUC_JP
 euc_kr        | t-ishii | EUC_KR
 euc_tw        | t-ishii | EUC_TW
 mule_internal | t-ishii | MULE_INTERNAL
 regression    | t-ishii | SQL_ASCII
 template1     | t-ishii | EUC_JP
 test          | t-ishii | EUC_JP
 unicode       | t-ishii | UNICODE
(9 rows)

20.2.3. Conversion de Jeu de Caract�res Automatique entre Serveur et Client

PostgreSQL supporte les conversions automatiques de jeu de caract�res entre client et serveur pour certains jeux de caract�res. Les informations de conversion sont conserv�s dans le catalogue syst�me pg_conversion. Vous pouvez cr�er une nouvelle conversion en utilisant la commande SQL CREATE CONVERSION. PostgreSQL est livr� avec certaines conversions pr�d�finies. Ils sont list�s dans Tableau 20-2.

Tableau 20-2. Conversion de Jeux de Caract�res Client/Serveur

Jeu de Caract�res ServeurJeux de Caract�res Clients Disponibles
SQL_ASCIISQL_ASCII, UNICODE, MULE_INTERNAL
EUC_JPEUC_JP, SJIS, UNICODE, MULE_INTERNAL
EUC_CNEUC_CN, UNICODE, MULE_INTERNAL
EUC_KREUC_KR, UNICODE, MULE_INTERNAL
JOHABJOHAB, UNICODE
EUC_TWEUC_TW, BIG5, UNICODE, MULE_INTERNAL
LATIN1LATIN1, UNICODE MULE_INTERNAL
LATIN2LATIN2, WIN1250, UNICODE, MULE_INTERNAL
LATIN3LATIN3, UNICODE, MULE_INTERNAL
LATIN4LATIN4, UNICODE, MULE_INTERNAL
LATIN5LATIN5, UNICODE
LATIN6LATIN6, UNICODE, MULE_INTERNAL
LATIN7LATIN7, UNICODE, MULE_INTERNAL
LATIN8LATIN8, UNICODE, MULE_INTERNAL
LATIN9LATIN9, UNICODE, MULE_INTERNAL
LATIN10LATIN10, UNICODE, MULE_INTERNAL
ISO_8859_5ISO_8859_5, UNICODE, MULE_INTERNAL, WIN, ALT, KOI8
ISO_8859_6ISO_8859_6, UNICODE
ISO_8859_7ISO_8859_7, UNICODE
ISO_8859_8ISO_8859_8, UNICODE
UNICODE EUC_JP, SJIS, EUC_KR, UHC, JOHAB, EUC_CN, GBK, EUC_TW, BIG5, LATIN1 to LATIN10, ISO_8859_5, ISO_8859_6, ISO_8859_7, ISO_8859_8, WIN, ALT, KOI8, WIN1256, TCVN, WIN874, GB18030, WIN1250
MULE_INTERNALEUC_JP, SJIS, EUC_KR, EUC_CN, EUC_TW, BIG5, LATIN1 to LATIN5, WIN, ALT, WIN1250, BIG5, ISO_8859_5, KOI8
KOI8ISO_8859_5, WIN, ALT, KOI8, UNICODE, MULE_INTERNAL
WINISO_8859_5, WIN, ALT, KOI8, UNICODE, MULE_INTERNAL
ALTISO_8859_5, WIN, ALT, KOI8, UNICODE, MULE_INTERNAL
WIN1256WIN1256, UNICODE
TCVNTCVN, UNICODE
WIN874WIN874, UNICODE

Pour activer la conversion automatique de jeux de caract�res, vous devez dire � PostgreSQL quel jeu de caract�res (encodage) vous voulez utiliser c�t� client. Il y'a plusieurs fa�ons de faire cela:

Si la conversion d'un caract�re particulier n'est pas possible -- supposons que vous avez choisi EUC_JP pour le serveur et LATIN1 pour le client, alors certains caract�res japonais ne pourront pas �tre convertis en LATIN1 -- ils seront transform�s en leur valeur hexad�cimale entre parenth�ses, i.e., (826C).

20.2.4. Plus de Lecture

Ceux-ci sont de bonnes sources pour commencer � ma�triser les diff�rents jeux de caract�res.

ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/cjk.inf

Des explications d�taill�es de EUC_JP, EUC_CN, EUC_KR, EUC_TW apparaissent dans la section 3.2.

http://www.unicode.org/

Le site web du Unicode Consortium

RFC 2044

UTF-8 est d�fini ici.