可変文字
可変文字は、一連のコード・ページにおいて異なるコード・ポイントに対応する文字です。 例えば、文字 # は可変文字です。 この文字は、CCSID 37、273、500、および 1047 では、コード・ポイント X'7B' に対応します。 ただし、この文字は、CCSID 277 では、コード・ポイント X'4A' に対応します。
不変文字は、CCSID に関係なく、同じコード・ポイントに対応する文字です。
可能な場合は不変文字を使用するのが理想的です。 ただし、可変文字を使用する場合は、Db2 が正しい CCSID を使用してそれらを解釈していることを確認してください。
例えば、国別文字: #、@、および $ を考慮してください。オブジェクト ID でこれらの文字を使用することはできますが、すべて可変文字であることに注意してください。 以下の表に、各種コード・ページにおける、これらの文字の対応する 16 進コード・ポイント値を示します。
| 文字 | コード・ページの対応する 16 進値 | ||||
|---|---|---|---|---|---|
| CCSID 37 | CCSID 500 | CCSID 1047 | CCSID 277 | CCSID 273 | |
| # | X'7B' | X'7B' | X'7B' | X'4A' | X'7B' |
| @ | X'7C' | X'7C' | X'7C' | X'80' | X'B5' |
| $ | X'5B' | X'5B' | X'5B' | X'67' | X'5B' |
パッケージ名、表スペース名、索引スペース名、フィールド・プロシージャー名などの ID でこれらの文字を使用する場合、注意が必要です。 これらのオブジェクトにはすべて、対応するデータセット、DBRM、またはロードモジュールがあり、 z/OS® で対応する名前で定義されています。 オブジェクト参照時に、オブジェクト作成時とは異なる CCSID を使用した場合、問題が発生する可能性があります。 この場合、 z/OS において、名前に異なる文字が含まれているため、対応するデータセット、DBRM、またはロードモジュールが見つからない可能性があります。
問題の原因となる可能性のある可変文字のもう 1 つの例は、二重引用符 (") です。トルコ語コード・ページ CCSID 1026 では、この文字はコード・ポイント X'FC ' に対応しています。 ただし、このコード・ポイントは、他の EBCDIC コード・ページでは同じではありません。
また、SQL ステートメントで可変文字を使用しないようにしてください。 例えば、演算子を使用して「等しくない」を表す必要があるとします。 これらの文字はほとんどのEBCDIC CCSIDで不変であるため、<>の符号化が最良の選択です。 ただし、状況によっては、 Db2 は「等しくない」を表す他の演算子(!= や¬= など)を許容する場合があります。 Db2 がこれらの演算子を許容するための条件の詳細については、「基本述語」 を参照してください。 これらの条件が満たされている場合でも、感嘆符(!)と否定記号(¬) はバリアントであり、他の問題を引き起こす可能性があります。 例えば、これらの文字は、クライアントで正しく表示されない場合があります。 また、SQL ステートメントがカタログからコピーされた場合、または別のシステムにより読み取られた場合、変換の問題が発生する場合があります。
可変文字に関するこれらの問題を防ぐには、以下の推奨事項を使用します。
- ID および SQL ステートメントでは不変文字を使用する。
- Db2 オブジェクトに名前を付けるときは、キーボードで入力できる文字のみを使用してください。 オブジェクト名では 16 進値は使用しないでください。 16 進値を使用すると、アプリケーションおよび照会が不必要に複雑になる場合があります。
- 値を連結する必要がある場合、|| の代わりに CONCAT を使用する。
- 「等しくない」という意味で、!= や ¬= の代わりに <> を使用します。
- 別のコード・ページの可変 16 進コード・ポイントは使用しない。 別のコード・ページの可変 16 進コード・ポイントを使用すると、変換エラーが発生する場合があります。