ヘッダーをスキップ
Oracle Rdb SQLリファレンス・マニュアル
リリース7.2
E06178-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

2.1.2 キャラクタ・セットHEX

キャラクタ・セット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では次を使用してデフォルト・キャラクタ・セットが取得されます。

2.1.4 表示キャラクタ・セット

表示キャラクタ・セットは、対話型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>

2.1.7 各国語キャラクタ・セット

各国語キャラクタ・セットは、選択するキャラクタ・セットに使用できる省略形の表記法です。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では両方に同じキャラクタ・セットを定義することをお薦めします。

2.1.8 キャラクタ・セットISOLATIN9

Oracle Rdbでは、ISOLATIN9キャラクタ・セット(ISO 8859-15で記述)がサポートされています。

ISOLATIN9は、8つのコードポイントを除き、ISOLATIN1に類似しています。

表2-3では、ISOLATIN9とISOLATIN1を比較します。

表2-3 キャラクタ・セットISOLATIN1とISOLATIN9の相違点
  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.1.9 Oracle NLSキャラクタ・セット名

表2-4に要約するように、Oracle Rdbでは、既存のOracle Rdbキャラクタ・セットの別名としてOracle National Language Support(NLS)の名前がサポートされています。キャラクタ・セット名を使用できる場合は、NLSの別名を使用できます。

表2-4 別名としてサポートされているOracle 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

2.1.10 キャラクタ・セットUNSPECIFIED

Oracle Rdbでは、UNSPECIFIEDキャラクタ・セットがサポートされています。UNSPECIFIEDキャラクタ・セットを持つテキスト・オブジェクト(列、リテラルなど)と、その他のテキスト・オブジェクトの間で比較および代入を実行できます。これは、一方のテキスト・オブジェクトのキャラクタ・セットに関係なく実行できます。

UNSPECIFIEDキャラクタ・セットの特性は、次のとおりです。

2.1.11 キャラクタ・セットの論理名

キャラクタ・セット名の論理名を定義できます。これにより、各国間でのアプリケーションの移植性が向上します。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>