キャラクタ・セットHEXは、2オクテットの16進文字00からFFで構成されています。キャラクタ・セットHEXの特性として、自動変換が有効な場合、このキャラクタ・セットを持つデータ・オブジェクトのコンテンツは表示キャラクタ・セットに自動的に変換されません。
キャラクタ・セットHEXをCASTファンクションおよびTRANSLATEファンクションとともに使用すると、テキスト・オブジェクトの16進数表記を取得できます。
HEXキャラクタ・セットへの変換では、オクテットごとにソース・データが16進数表記に変換されます。
HEXキャラクタ・セットからの変換では、16進数表記から変換先キャラクタ・セットに変換されます。
次に例を示します。
SQL> show character sets Default character set is DOS_LATINUS National character set is DOS_LATINUS Identifier character set is DOS_LATINUS Literal character set is DOS_LATINUS Display character set is DOS_LATINUS Alias RDB$DBHANDLE: Identifier character set is DEC_MCS Default character set is DEC_MCS National character set is DEC_MCS SQL> show automatic translation Automatic translation: ON SQL> create tab latin (f1 char(4) char set win_latin1, cont> f2 char(4) char set dos_latinus); SQL> insert into latin value (' AÉÖ ','AÉÖ '); 1 row inserted SQL> select f1, cast(f1 as char(8) char set hex), cont> f2, cast(f2 as char(8) char set hex) from latin; F1 F2 ÉÖ 41C9D620 AÉÖ 41909920 1 row selected SQL> select cast (_hex'9099' as char(2) ) from rdb$database; ÉÖ 1 row selected SQL> select translate (_hex'9099' using rdb$dos_latinus ) Cont> from rdb$database; ÉÖ 1 row selected |
前述の例は、リテラル・キャラクタ・セットDOS_LATINUSとWIN_LATIN1を含むフィールドF2の間の自動変換、およびF2フィールドから表示キャラクタ・セットに返す後続の自動変換も示しています。
フィールド・コンテンツの16進数表記は、入力リテラルと表示される出力が同一の場合でも、データベースに格納されている実際のデータはフィールドf1とフィールドf2では異なることを示しています。
2.1.3 デフォルト・キャラクタ・セット
デフォルト・キャラクタ・セットは、SQLで次の要素に対して使用されるキャラクタ・セットです。
デフォルト・キャラクタ・セットは、セッションおよびデータベースのレベルで指定できます。セッション・キャラクタ・セットおよびデータベース・キャラクタ・セットの詳細は、『Oracle Rdb7 Introduction to SQL』および『Oracle Rdb7 Guide to Database Design and Definition』を参照してください。
データベースのデフォルト・キャラクタ・セットは、データベースの作成時にのみ指定できます。データベースを作成した後、データベースのデフォルト・キャラクタ・セットは変更できません。
SQLでは、言語をMIAに設定した場合およびセッション・レベルでデフォルト・キャラクタ・セットを指定した場合を除き、デフォルト・キャラクタ・セットとしてDEC_MCSが使用されます。データベースの作成時に別のデフォルト・キャラクタ・セットを指定すると、指定したデフォルト・キャラクタ・セットが優先されます。
デフォルト・キャラクタ・セットを指定するには、第2.1節にリストされたキャラクタ・セット名のいずれかを使用してください。
デフォルト・キャラクタ・セットは、通貨記号の設定に影響を与えません。
SQLプログラム(SQLモジュール言語またはプリコンパイルされたSQL)をコンパイルする場合、SQLでは次を使用してデフォルト・キャラクタ・セットが取得されます。
表示キャラクタ・セットは、対話型SQLでテキストが表示される前に自動変換されるキャラクタ・セットを決定する場合にSQLで使用されるキャラクタ・セットか、またはSQLによってユーザー・プログラムに返されるテキストに対して使用されるキャラクタ・セットです。
セッションまたはモジュールに対してのみ表示キャラクタ・セットを指定するには、SQLモジュール・ヘッダーのSET DISPLAY CHARACTER SET文またはDISPLAY CHARACTER SET句、DECLARE MODULE文またはDECLARE ALIAS文を使用します。
表示キャラクタ・セットに選択できるのは、ASCII文字を含むキャラクタ・セットのみです。第2.1.5項では、表示キャラクタ・セットの指定に使用できるキャラクタ・セットのサブセットについて説明します。
2.1.5 識別子キャラクタ・セット
識別子キャラクタ・セットは、表名や列名など、データベース・オブジェクト名に対してSQLで使用されるキャラクタ・セットです。識別子キャラクタ・セットは、セッションおよびデータベースのレベルで指定できます。識別子キャラクタ・セットに選択できるのは、ASCII文字を含むキャラクタ・セットのみです。これは、Oracle Rdbシステム・メタデータのオブジェクト名(ASCII表記)を格納する必要があるためです。
データベースの識別子キャラクタ・セットは、データベースの作成時にのみ指定できます。データベースを作成した後、データベースの識別子キャラクタ・セットは変更できません。
次に、識別子キャラクタ・セットに使用されるキャラクタ・セットのリストを示します。
SQLプログラム(SQLモジュール言語またはプリコンパイルされたSQL)をコンパイルする場合、SQLでは次を使用して識別子キャラクタ・セットが取得されます。
SQLでは、言語をMIAに設定した場合およびセッション・レベルで識別子キャラクタ・セットを指定した場合を除き、識別子キャラクタ・セットとしてDEC_MCSが使用されます。データベースの作成時に別の識別子キャラクタ・セットを指定すると、指定した識別子キャラクタ・セットが優先されます。
2.1.6 リテラル・キャラクタ・セット
リテラル・キャラクタ・セットは、修飾されていない文字列リテラルに対してSQLで使用されるキャラクタ・セットです。
セッションまたはモジュールに対してのみリテラル・キャラクタ・セットを指定するには、SQLモジュール・ヘッダーのSET LITERAL CHARACTER SET文またはLITERAL CHARACTER SET句、DECLARE MODULE文またはDECLARE ALIAS文を使用します。
列にデータを挿入する場合、列を定義したキャラクタ・セットと同じキャラクタ・セットでリテラルを修飾する必要があります。
たとえば、モジュールのリテラル・キャラクタ・セットがDEC_MCSであるとします。列ENGLISHがデータ型DEC_MCSとして定義されている場合は、次の文を実行するとSQLによってエラーが返されます。
SQL> INSERT INTO COLOURS cont> (ENGLISH) cont> VALUES cont> (_DEC_KANJI'Black'); %SQL-F-INCCSASS, Incompatible character set assignment between ENGLISH and <value expression> SQL> |
各国語キャラクタ・セットは、選択するキャラクタ・セットに使用できる省略形の表記法です。SQLでは、次の要素に対して各国語キャラクタ・セットが使用されます。
各国語キャラクタ・セットを指定するには、表2-1にリストされたキャラクタ・セット名のいずれかを使用してください。
各国語キャラクタ・セットは、セッションおよびデータベースのレベルで指定できます。セッション・キャラクタ・セットおよびデータベース・キャラクタ・セットの詳細は、『Oracle Rdb7 Introduction to SQL』および『Oracle Rdb7 Guide to Database Design and Definition』を参照してください。
データベースの各国語キャラクタ・セットは、データベースの作成時に指定します。データベースの各国語キャラクタ・セットは変更できません。
SQLでは、言語をMIAに設定した場合およびセッション・レベルで各国語キャラクタ・セットを指定した場合を除き、各国語キャラクタ・セットとしてDEC_MCSが使用されます。データベースの作成時に別の各国語キャラクタ・セットを指定すると、指定した各国語キャラクタ・セットが優先されます。
SQLプログラム(SQLモジュール言語またはプリコンパイルされたSQL)をコンパイルする場合、SQLでは次を使用して各国語キャラクタ・セットが取得されます。
SQLではデータベースとモジュールの各国語キャラクタ・セットが一致している必要はありませんが、Oracle Rdbでは両方に同じキャラクタ・セットを定義することをお薦めします。 |
ISOLATIN9は、8つのコードポイントを除き、ISOLATIN1に類似しています。
表2-3では、ISOLATIN9とISOLATIN1を比較します。
ISO Latin 1 | ISO Latin 9 | |||
---|---|---|---|---|
Code Pos Hex | Unicode Pos Hex | 名前 | Unicode Pos Hex | 名前 |
A4 | 00A4 | 通貨記号 | 20AC | ユーロ記号 |
A6 | 00A6 | 縦破線 | 0160 | Sキャロン |
A8 | 00A8 | ウムラウト | 0161 | sキャロン |
B4 | 00B4 | 鋭アクセント | 017D | Zキャロン |
B8 | 00B8 | セディーユ | 017E | zキャロン |
BC | 00BC | 4分の1 | 0152 | OE連字 |
BD | 00BD | 2分の1 | 0153 | oe連字 |
BE | 00BE | 4分の3 | 0178 | Yウムラウト |
表2-4に要約するように、Oracle Rdbでは、既存のOracle Rdbキャラクタ・セットの別名としてOracle National Language Support(NLS)の名前がサポートされています。キャラクタ・セット名を使用できる場合は、NLSの別名を使用できます。
US7ASCII | ASCII |
WE8DEC | DEC_MCS |
WE8ISO8859P1 | ISOLATIN1 |
WE8ISO8859P1 | ISOLATIN9 |
CL8ISO8859P5 | ISOLATINCYRILLIC |
AR8ISO8859P6 | ISOLATINARABIC |
EL8ISO8859P7 | ISOLATINGREEK |
IW8ISO8859P8 | ISOLATINHEBREW |
TH8TISASCII | TACTIS |
JA16VMS | DEC_KANJI |
JA16SJIS | SHIFT_JIS |
KO16KSC5601 | KOREAN |
ZHS16CGB231280 | HANZI |
ZH16BIG5 | BIG5 |
JA16EUCFIXED | KANJI |
Oracle Rdbでは、UNSPECIFIEDキャラクタ・セットがサポートされています。UNSPECIFIEDキャラクタ・セットを持つテキスト・オブジェクト(列、リテラルなど)と、その他のテキスト・オブジェクトの間で比較および代入を実行できます。これは、一方のテキスト・オブジェクトのキャラクタ・セットに関係なく実行できます。
UNSPECIFIEDキャラクタ・セットの特性は、次のとおりです。
キャラクタ・セット名の論理名を定義できます。これにより、各国間でのアプリケーションの移植性が向上します。SQLでキャラクタ・セット名を使用する場合は、この論理名またはパラメータを使用できます。SQLでは、プリコンパイルされたSQLおよびSQLモジュール言語の論理名またはパラメータはコンパイル時に変換され、動的SQLおよび対話型SQLの論理名またはパラメータは実行時に変換されます。
論理名は、次のいずれかで始まります。
論理名またはパラメータは、表2-1にリストされた有効なキャラクタ・セット名に変換する必要があります。
次の例は、キャラクタ・セットの論理名を定義および使用する方法を示しています。
$ DEFINE RDB$LOCAL_CHAR_SET KANJI $ SQL SQL> ATTACH 'FILENAME personnel'; SQL> CREATE DOMAIN SURNAME_DOM CHAR(20) CHARACTER SET RDB$LOCAL_CHAR_SET; SQL> SHOW DOMAIN SURNAME_DOM SURNAME_DOM CHAR(20) RDB$LOCAL_CHAR_SET 10 Characters, 20 Octets SQL> |