28. April 2010

WE8ISO... Was? Zeichensatznamen in Oracle ...

English title: WE8ISO... What? Character Set Names in Oracle

Wie alle wissen, verwendet Oracle, wenn es um Encodings geht, eigene Namen. Der Zeichensatz UTF-8 ist bei Oracle AL32UTF8, die hierzulande häufig verwendete Codepage iso-8859-1 heißt WE8ISO8859P1 und so weiter ... Aber was ist, wenn man mal eine Codepage einstellen muss, die man nicht so gut kennt ...? Beispielsweise IT oder JP oder ISO-2022-JP. Letzteres lässt sich bspw. nicht einfach nach WE8ISO2022JP übersetzen ...
As we all know: Oracle uses own names for character sets. And for the commonly used encodings we all know the names: UTF-8 is AL32UTF8, Windows-1252 is WE8MSWIN1252 and so on. But what if you need to set NLS_LANG to a characterset which Oracle name you just don't know ...? Examples are IT, J or ISO-2022-JP. The latter one might lead to WE8ISO2022JP - but that would be wrong.
Ein Blick Handbuch hilft natürlich immer weiter - aber auch die Datenbank ist in der Lage, die Oracle-Bezeichnungen in die auch anderswo üblichen "IANA"-Namen zu übersetzen. So übersetzt das folgende SELECT mit Hilfe der Funktion UTL_I18N.MAP_CHARSET von IANA nach Oracle ...
A quick look into documentation does always help - of course. But the database can also translate charset names - the following query uses the function UTL_I18N.MAP_CHARSET. First we translate IANA to Oracle names.
SQL> select utl_i18n.map_charset('it',0,1) from dual;

UTL_I18N.MAP_CHARSET('IT',0,1)
----------------------------------------------------------
I7DEC

SQL> select utl_i18n.map_charset('windows-1252',0,1) from dual;

UTL_I18N.MAP_CHARSET('WINDOWS-2152',0,1)
----------------------------------------------------------
WE8MSWIN1252
Setzt man an letzter Stelle statt der 1 eine 0, so übersetzt die Funktion umgekehrt ...
Changing the last parameter from 1 to 0 (zero) the translation works vice versa ...
SQL> select utl_i18n.map_charset('AL32UTF8',0,0) from dual;

UTL_I18N.MAP_CHARSET('AL32UTF8',0,0)
----------------------------------------------------------
UTF-8

SQL> select utl_i18n.map_charset('WE8PC850',0,0) from dual;

UTL_I18N.MAP_CHARSET('WE8PC850',0,0)
--------------------------------------------------------------
CP850
Eine manchmal sicherlich hilreiche Funktion ...
A nice one, isn't it ...

Keine Kommentare:

Beliebte Postings