ヘッダーをスキップ

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

- DECLARE ALIAS文のDEFAULT CHARACTER SET句は、コンパイル時に別名のデフォルト・キャラクタ・セットを指定します。実行時には、SQLではアタッチしたデータベースのデフォルト・キャラクタ・セットが使用されます。実行時に、データベースのデフォルト・キャラクタ・セットがDECLARE ALIAS句で指定されたデフォルト・キャラクタ・セットと同じであることを確認する必要があります。

- SQLモジュール・ヘッダーのDEFAULT CHARACTER SET句またはDECLARE MODULE文は、キャラクタ・セットによって修飾されていないパラメータのキャラクタ・セットを指定します。

- 動的SQLでは、SET DEFAULT CHARACTER SET文は、実行時にキャラクタ・セットによって修飾されていないパラメータのキャラクタ・セットを指定します。

- RDB$CHARACTER_SET論理名。ただし、この論理名は廃止予定であり、将来のリリースではサポートされません。

## 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表記）を格納する必要があるためです。

データベースの識別子キャラクタ・セットは、データベースの作成時にのみ指定できます。データベースを作成した後、データベースの識別子キャラクタ・セットは変更できません。

次に、識別子キャラクタ・セットに使用されるキャラクタ・セットのリストを示します。

- ASCII

- AL24UTFFSS

- DEC_MCS

- DOS_LATIN1

- DOS_LATINUS

- DEVANAGARI

- DEC_SICGCC

- DEC_HANYU

- DEC_HANZI

- ISOLATINARABIC

- ISOLATINCYRILLIC

- ISOLATIN1

- ISOLATIN9

- ISOLATINGREEK

- ISOLATINHEBREW

- DEC_KANJI

- KATAKANA

- DEC_KOREAN

- SHIFT_JIS

- UTF8

- UNSPECIFIED

- TACTIS

- WIN_ARABIC

- WIN_GREEK

- WIN_CYRILLIC

- WIN_HEBREW

SQLプログラム（SQLモジュール言語またはプリコンパイルされたSQL）をコンパイルする場合、SQLでは次を使用して識別子キャラクタ・セットが取得されます。

- SQLモジュール・ヘッダーのIDENTIFIER CHARACTER SET句またはDECLARE MODULE文は、キャラクタ・セットによって修飾されていないパラメータのキャラクタ・セットを指定します。

- 動的SQLでは、SET IDENTIFIER CHARACTER SET文は、実行時にキャラクタ・セットによって修飾されていないパラメータのキャラクタ・セットを指定します。

- RDB$CHARACTER_SET論理名。ただし、この論理名は廃止予定であり、将来のリリースではサポートされません。

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では、次の要素に対して各国語キャラクタ・セットが使用されます。

- データ型NCHARまたはデータ型NCHAR VARYINGのすべての列およびドメイン、およびCASTファンクションのNCHARデータ型。これらのデータ型の詳細は、第2.3.1項を参照してください。

- データ型NCHARまたはデータ型NCHAR VARYINGのSQLモジュール言語のすべてのパラメータ。

- 各国語キャラクタ・セットによって修飾されているすべての文字列リテラル（文字Nと一重引用符（N'など）が前に付くリテラル）。詳細は、第2.4.2.1.2項を参照してください。

各国語キャラクタ・セットを指定するには、表2-1にリストされたキャラクタ・セット名のいずれかを使用してください。

各国語キャラクタ・セットは、セッションおよびデータベースのレベルで指定できます。セッション・キャラクタ・セットおよびデータベース・キャラクタ・セットの詳細は、『Oracle Rdb7 Introduction to SQL』および『Oracle Rdb7 Guide to Database Design and Definition』を参照してください。

データベースの各国語キャラクタ・セットは、データベースの作成時に指定します。データベースの各国語キャラクタ・セットは変更できません。

SQLでは、言語をMIAに設定した場合およびセッション・レベルで各国語キャラクタ・セットを指定した場合を除き、各国語キャラクタ・セットとしてDEC_MCSが使用されます。データベースの作成時に別の各国語キャラクタ・セットを指定すると、指定した各国語キャラクタ・セットが優先されます。

SQLプログラム（SQLモジュール言語またはプリコンパイルされたSQL）をコンパイルする場合、SQLでは次を使用して各国語キャラクタ・セットが取得されます。

- DECLARE ALIAS文のNATIONAL CHARACTER SET句は、コンパイル時に別名の各国語キャラクタ・セットを指定します。列定義、ドメイン定義、CASTファンクションのNCHARデータ型およびNCHAR VARYINGデータ型の各国語キャラクタ・セットが制御されます。実行時には、SQLではアタッチしたデータベースの各国語キャラクタ・セットがこれらの要素に対して使用されます。

- SQLモジュール・ヘッダーのNATIONAL CHARACTER SET句およびDECLARE MODULE文は、各国語キャラクタ・セットによって修飾されているリテラルのキャラクタ・セットおよびデータ型NCHARまたはデータ型NCHAR VARYINGで定義されているパラメータのキャラクタ・セットを指定します。

- 動的SQLでは、SET NATIONAL CHARACTER SET文は、実行時にデータ型NCHARおよびデータ型NCHAR VARYINGを持つ列のキャラクタ・セット、および各国語キャラクタ・セットによって修飾されている文字列リテラルのキャラクタ・セットを指定します。

- RDB$CHARACTER_SET論理名。ただし、この論理名は廃止予定であり、将来のリリースではサポートされません。

注意 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キャラクタ・セットの特性は、次のとおりです。

- キャラクタ・セットIDは32767です。

- セッション・キャラクタ・セットまたはデータベース・キャラクタ・セット（識別子キャラクタ・セットを含む）の指定に使用できます。

- 単一のオクテットのキャラクタ・セット（固定）です。

- 大/小文字の区別は、ASCII文字にのみ適用されます。

- 次のASCIIを含みます。

  - 空白文字は、ASCIIの空白文字（0x20）です。

  - ワイルドカード文字は、ASCIIのアンダースコア（0x5f）です。

  - 文字列ワイルドカードは、ASCIIのパーセント（0x25）です。

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

キャラクタ・セット名の論理名を定義できます。これにより、各国間でのアプリケーションの移植性が向上します。SQLでキャラクタ・セット名を使用する場合は、この論理名またはパラメータを使用できます。SQLでは、プリコンパイルされたSQLおよびSQLモジュール言語の論理名またはパラメータはコンパイル時に変換され、動的SQLおよび対話型SQLの論理名またはパラメータは実行時に変換されます。

論理名は、次のいずれかで始まります。

- RDBVMS$

- RDB$

- SQL$
  Oracle Rdbでは、RDB$で論理名を始めることをお薦めします。

論理名またはパラメータは、表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>