Comments
Transcript
IBM Informix GLS ユーザーズ ガイド (日本語版) (PDF:1.6MB)
IBM Informix GLS ユーザーズ ガイド バージョン 9.4 GB88-8629-00 (英文原典:G251-1241-00) IBM Informix GLS ユーザーズ ガイド バージョン 9.4 GB88-8629-00 (英文原典:G251-1241-00) お願い 本書および本書で紹介する製品をご使用になる前に、169 ページの『特記事項』に記載されている情報をお読みください。 本書には、IBM の専有情報が含まれています。その情報は、使用許諾条件に基づき提供され、著作権により保護され ています。本書に記載される情報には、いかなる製品の保証も含まれていません。また、本書で提供されるいかなる 記述も、製品保証として解釈すべきではありません。 IBM は、お客様が提供するいかなる情報も、お客様に対してなんら義務も負うことのない、自ら適切と信ずる方法 で、使用もしくは配布することができるものとします。 本マニュアルに関するご意見やご感想は、次の URL からお送りください。今後の参考にさせていただきます。 http://www.ibm.com/jp/manuals/main/mail.html なお、日本 IBM 発行のマニュアルはインターネット経由でもご購入いただけます。詳しくは http://www.ibm.com/jp/manuals/ の「ご注文について」をご覧ください。 (URL は、変更になる場合があります) お客様の環境によっては、資料中の円記号がバックスラッシュと表示されたり、バックスラッシュが円記号と表示さ れたりする場合があります。 原 典: G251-1241-00 IBM Informix GLS User’s Guide Version 9.4 発 行: 日本アイ・ビー・エム株式会社 担 当: ナショナル・ランゲージ・サポート 第1刷 2003.5 この文書では、平成明朝体™W3、平成明朝体™W9、平成角ゴシック体™W3、平成角ゴシック体™W5、および平成角 ゴシック体™W7を使用しています。この(書体*)は、 (財)日本規格協会と使用契約を締結し使用しているものです。 フォントとして無断複製することは禁止されています。 注* 平成明朝体™W3、平成明朝体™W9、平成角ゴシック体™W3、 平成角ゴシック体™W5、平成角ゴシック体™W7 © Copyright International Business Machines Corporation 1996, 2003. All rights reserved. © Copyright IBM Japan 2003 目次 序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii 本書について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii 対象ユーザ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii ソフトウェア依存関係 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii ロケールに関する前提事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii デモンストレーション データベース. . . . . . . . . . . . . . . . . . . . . . . . . . viii Dynamic Server の新機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix マニュアルの規則. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x 文字の表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x その他の規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x 構文ダイヤグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi コード例の表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv 文字表現規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv 関連マニュアル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii 参考文献 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix 業界標準への対応 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix 第 1 章 GLS 基本機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 本章の概要 . . . . . . . . . . . . . . . GLS 機能の使用 . . . . . . . . . . . . . IBM Informix 製品による GLS サポート . . . . GLS ロケールの理解. . . . . . . . . . . . 文字データのコード セット . . . . . . . . コード セットの文字クラス . . . . . . . . 文字データの照合順序 . . . . . . . . . . エンド ユーザ フォーマット . . . . . . . GLS ロケールの設定 . . . . . . . . . . . クライアント/サーバ環境におけるロケール . . . デフォルト ロケール . . . . . . . . . . 非デフォルト ロケールの設定 . . . . . . . IBM Informix 製品での GLS ロケールの使用 . . . 非 ASCII 文字のサポート . . . . . . . . データベース接続の確立 . . . . . . . . . コード セット変換の実行. . . . . . . . . メッセージ ファイルの探索 . . . . . . . . エンド ユーザ フォーマットのカスタマイズ . . . 日時エンド ユーザ フォーマットのカスタマイズ . 通貨値のカスタマイズ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 . 1 . 3 . 7 . 8 . 9 . 9 . 12 . 15 . 16 . 21 . 23 . 24 . 24 . 25 . 30 . 34 . 34 . 34 . 36 第 2 章 GLS 環境変数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 本章の概要 . . . . 環境変数の設定と検索 . GLS 関連の環境変数 . CC8BITLEVEL . . CLIENT_LOCALE . DBDATE . . . . DBLANG . . . . DB_LOCALE . . . DBMONEY . . . DBNLS (IDS のみ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . © Copyright IBM Corp. 1996, 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 37 38 38 39 40 40 41 43 43 iii DBTIME (E/C のみ) ESQLMF . . . . GLS8BITFSYS . . GL_DATE . . . . GL_DATETIME . . SERVER_LOCALE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 45 45 48 53 58 第 3 章 SQL 機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 本章の概要 . . . . . . . . . . . . . . . . . データベース オブジェクトの命名. . . . . . . . . . 識別子のルール . . . . . . . . . . . . . . . 識別子内の非 ASCII 文字 . . . . . . . . . . . 識別子内の有効な文字 . . . . . . . . . . . . . 文字データ型の使用 . . . . . . . . . . . . . . 文字データのローカライズ済み照合 . . . . . . . . その他の文字データ型 . . . . . . . . . . . . . 文字データの処理 . . . . . . . . . . . . . . . 引用符付き文字列の指定 . . . . . . . . . . . . コメントの指定 . . . . . . . . . . . . . . . 列サブ文字列の指定 . . . . . . . . . . . . . TRIM 関数への引数の指定 . . . . . . . . . . . 大文字と小文字を区別しない検索関数の使用 (IDS のみ) . 文字データの照合 . . . . . . . . . . . . . . SQL 長さ関数の使用 . . . . . . . . . . . . . ロケールを区別するデータ型の使用 . . . . . . . . . 金額 (MONEY) 型の処理 . . . . . . . . . . . . 拡張データ型の処理 (IDS のみ) . . . . . . . . . スマート ラージ オブジェクトの処理 (IDS のみ) . . . データ操作文の使用 . . . . . . . . . . . . . . WHERE 節内の条件の指定 . . . . . . . . . . . 元号ベース日付の指定 . . . . . . . . . . . . . データのロードとアンロード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 62 62 63 67 68 68 72 75 75 76 76 81 81 81 90 95 95 97 98 98 98 99 99 第 4 章 データベース サーバの機能 . . . . . . . . . . . . . . . . . . . . . . . 103 本章の概要 . . . . . . . . . . . . . . . . . Informix データベース サーバによる GLS サポート . . . データベース サーバ コード セット変換 . . . . . . データベース サーバが変換するデータ . . . . . . . ユーティリティに対するロケール特有のサポート . . . . データベース サーバ ユーティリティの非 ASCII 文字 . SQL ユーティリティの非 ASCII 文字 . . . . . . . C ユーザ定義ルーチンのロケール サポート (IDS および DB UDR の現行処理ロケール . . . . . . . . . . . ソース コードの非 ASCII 文字 . . . . . . . . . 文字データのコピー . . . . . . . . . . . . . IBM Informix GLS ライブラリ . . . . . . . . . コード セット変換と DataBlade API. . . . . . . . ロケール特有のデータ フォーマット . . . . . . . 各国対応例外メッセージ. . . . . . . . . . . . 各国対応トレース メッセージ . . . . . . . . . . 不透明 (opaque) 型でロケールを区別するデータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . API のみ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 103 105 105 106 107 107 108 108 109 110 110 111 113 113 117 120 第 5 章 一般的な SQL API 機能 . . . . . . . . . . . . . . . . . . . . . . . . 123 本章の概要 (E/C のみ) . . . . . . . . . . . . . . . . . . IBM Informix クライアント アプリケーションにおける GLS のサポート . クライアント アプリケーションのコード セット変換 . . . . . . . iv IBM Informix GLS: ユーザーズ ガイド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 . 123 . 123 クライアント アプリケーションの国際化 国際化. . . . . . . . . . . ローカライゼーション . . . . . ロケール特有データの処理 . . . . . 文字の処理 . . . . . . . . . データのフォーマット . . . . . 部分文字の回避. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 126 127 129 129 130 130 第 6 章 IBM Informix ESQL/C 機能. . . . . . . . . . . . . . . . . . . . . . . 133 本章の概要 (E/C のみ) . . . . . . . . . . . 非 ASCII 文字の処理 . . . . . . . . . . . . ホスト変数での非 ASCII 文字の使用 . . . . . 非 ASCII ファイル名の生成 . . . . . . . . ESQL/C ソース ファイルでの非 ASCII 文字の使用. ロケールを区別するデータの変数の定義 . . . . . 拡張 ESQL/C ライブラリ関数の使用 . . . . . . DATE フォーマット関数 . . . . . . . . . DATETIME フォーマット関数 . . . . . . . . 数値フォーマット関数 . . . . . . . . . . 文字列関数 . . . . . . . . . . . . . . GLS 特有のエラー メッセージ . . . . . . . コード セット変換の処理 . . . . . . . . . . テキスト (TEXT) 型値の書込み . . . . . . . DESCRIBE 文の使用 . . . . . . . . . . . TRIM 関数の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 134 134 135 136 139 140 140 142 144 148 148 148 149 150 151 付録. GLS ファイルの管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 GLS ファイルへのアクセス. . . . . . . . GLS ロケール ファイル . . . . . . . . . ロケール カテゴリ . . . . . . . . . ロケール ファイルの格納場所 . . . . . . その他の GLS ファイル . . . . . . . . . コード セット変換ファイル . . . . . . コード セット ファイル. . . . . . . . Informix レジストリ ファイル (Windows のみ) 未使用ファイルの削除 . . . . . . . . . ロケール/コードセット変換ファイルの削除 . コード セット ファイルの削除 . . . . . glfiles ユーティリティ (UNIX のみ) . . . . . コード セット変換ファイルのリスト . . . GLS ロケール ファイルのリスト . . . . . 文字マッピング ファイルのリスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 154 154 158 160 160 162 163 164 164 164 165 165 166 168 特記事項. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 商標 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 目次 v vi IBM Informix GLS: ユーザーズ ガイド 序 本書について . . . . . . . . . . . . . . vii 対象ユーザ . . . . . . . . . . . . . viii ソフトウェア依存関係 . . . . . . . . . viii ロケールに関する前提事項 . . . . . . . . viii デモンストレーション データベース. . . . . viii Dynamic Server の新機能 . . . . . . . . . . ix マニュアルの規則. . . . . . . . . . . . . x 文字の表記 . . . . . . . . . . . . . . x その他の規則 . . . . . . . . . . . . . x コメント. . . . . . . . . . . . . . x 機能、製品、およびプラットフォーム . . . . xi 構文ダイヤグラム . . . . . . . . . . . xi 構文ダイヤグラムの読み方 . . . . . . . xii キーワードと句読点 . . . . . . . . . xiii 識別子と名前 . . . . . . . . . . . xiv コード例の表記 . . . . . . . . . . . . xiv 文字表現規則 . . . . . . . . . . . . . xv シングルバイト文字 . . . . . . . . . xv マルチバイト文字 . . . . . . . . . . xv 同じ文字列内のシングルバイト文字とマルチ バイト文字 . . . . . . . . . . . . xvi 文字列内の空白文字 . . . . . . . . . xvi 後続の空白文字 . . . . . . . . . . . xvi 関連マニュアル. . . . . . . . . . . . . xvii 参考文献 . . . . . . . . . . . . . . . xix 業界標準への対応 . . . . . . . . . . . . xix 第 1 章 GLS 基本機能. . . . . . . . . . . 本章の概要 . . . . . . . . . . . . . . . GLS 機能の使用 . . . . . . . . . . . . . IBM Informix 製品による GLS サポート . . . . Informix データベース サーバ . . . . . . IBM Informix クライアント アプリケーション およびユーティリティ . . . . . . . . . IBM Informix GLS アプリケーション プログラ ミング インターフェイス . . . . . . . . サポートされるデータ型 . . . . . . . . 追加の GLS サポート . . . . . . . . . GLS ロケールの理解. . . . . . . . . . . . 1 1 1 3 4 4 5 6 7 7 文字データのコード セット . . . . . . . . 8 コード セットの文字クラス . . . . . . . . 9 文字データの照合順序 . . . . . . . . . . 9 コード セット順序 . . . . . . . . . . 10 ローカライズ順序 . . . . . . . . . . 10 Unicode 照合 . . . . . . . . . . . . 11 照合サポート . . . . . . . . . . . . 12 エンド ユーザ フォーマット . . . . . . . 12 数値および通貨フォーマット . . . . . . 14 日付および時刻フォーマット . . . . . . 14 GLS ロケールの設定 . . . . . . . . . . . 15 クライアント/サーバ環境におけるロケール . . . 16 クライアント ロケール . . . . . . . . 17 データベース ロケール . . . . . . . . 19 サーバ ロケール. . . . . . . . . . . 21 デフォルト ロケール . . . . . . . . . . 21 デフォルト コード セット . . . . . . . 22 日付および時刻のデフォルト エンド ユーザ フォーマット . . . . . . . . . . . . 22 数値および通貨値のデフォルト エンド ユーザ フォーマット . . . . . . . . . . . . 23 非デフォルト ロケールの設定 . . . . . . . 23 IBM Informix 製品での GLS ロケールの使用 . . . 24 非 ASCII 文字のサポート . . . . . . . . 24 データベース接続の確立 . . . . . . . . . 25 クライアント ロケールの送信 . . . . . . 25 データベース ロケールの検証 . . . . . . 26 接続警告の検査 . . . . . . . . . . . 26 サーバ処理ロケールの決定 . . . . . . . 27 コード セット変換の実行. . . . . . . . . 30 コード セット変換の実行時期 . . . . . . 32 メッセージ ファイルの探索 . . . . . . . . 34 エンド ユーザ フォーマットのカスタマイズ . . . 34 日時エンド ユーザ フォーマットのカスタマイズ 34 元号ベースの日時フォーマット . . . . . . 35 日時の優先順位 . . . . . . . . . . . 35 通貨値のカスタマイズ . . . . . . . . . . 36 本書について 本書では、IBM Informix 製品で利用できる広域言語サポート (GLS) 機能について 説明します。 GLS 機能を使用すると、IBM Informix アプリケーション プログラ ミング インターフェイス (API) と IBM Informix データベース サーバが、異なる 言語、文化上の慣習、およびコード セットを処理できるようになります。本書で は、GLS に固有の、言語に関するトピックのみを説明します。 本書では、Microsoft Windows と UNIX の両方について、Informix データベース サーバの GLS 情報を取り上げます。 © Copyright IBM Corp. 1996, 2003 vii 対象ユーザ 本書は、IBM Informix 製品を用いて各国対応データベース管理アプリケーションを 作成するために GLS 環境を使用するシステム管理者とアプリケーション開発者を 対象に書かれています。 本書は、非デフォルト ロケールで IBM Informix 製品を使用する必要のあるユーザ を主に対象としています。ユーザは Informix データベース サーバと関連製品を使 い慣れているものと想定されています。そうでない場合は、「IBM Informix: スター トアップ ガイド」を参照してください。 ファイル名、パス名、および他のコンテキスト内の非 ASCII 文字をサポートする、 オペレーティング システムの機能について詳しい情報が必要な場合は、オペレーテ ィング システムのマニュアルを参照してください。 ソフトウェア依存関係 本書では、IBM Informix Dynamic Server バージョン 9.4 を、GLS ライブラリのバ ージョン 4.0 とともにデータベース サーバとして使用することを想定しています。 (IBM Informix Extended Parallel Server バージョン 8.4 は GLS ライブラリのバー ジョン 3.13 を使用します。後続の節 xvii ページの『関連マニュアル』で説明され ている IBM Informix データベース サーバのリリース ノートも参照してくださ い。) ロケールに関する前提事項 IBM Informix 製品は、多くの言語、国/地域別環境、およびコード セットをサポー トできます。文化的差異に基づいた情報がすべて、GLS ロケールと呼ばれる単一の 環境にまとめられています。 本書では、デフォルト ロケールとして U.S. 8859-1 英語のロケールを使用している ものと想定しています。デフォルトは、UNIX プラットフォームでは en_us.8859-1 (ISO 8859-1) になり、Windows 環境の場合には en_us.1252 (Microsoft 1252) にな ります。このロケールは、日付、時刻、および通貨について米国英語 (U.S. English) フォーマットの規則をサポートし、ISO 8859-1 または Microsoft 1252 コード セッ ト (ASCII コード セットに é、è、ñ などの多くの 8 ビット文字を加えたものを含 む) もサポートします。データまたは SQL 識別子で非デフォルト文字を使用する予 定の場合、または文字データの非デフォルト照合ルールに準拠する場合は、適切な 非デフォルト ロケールを指定する必要があります。 デモンストレーション データベース IBM Informix データベース サーバ製品に提供された DB–Access ユーティリティに は、次のデモンストレーション データベースが 1 つ以上含まれます。 v stores_demo データベースは、架空のスポーツ用品卸売り業者に関する情報を 備えたリレーショナル スキーマを示したものです。 IBM Informix マニュアルの 多くの例が、このデータベースを基にしています。 Extended Parallel Server viii IBM Informix GLS: ユーザーズ ガイド v sales_demo データベースは、データ ウェアハウジング アプリケーションの次 元スキーマを説明しています。次元データ モデルの概念については、 「IBM Informix: Database Design and Implementation Guide」を参照してくださ い。 Extended Parallel Server の終り Dynamic Server v superstores_demo データベースは、オブジェクト リレーショナル スキーマを 示したものです。このデータベースには、拡張データ型、型と表継承、およびユ ーザ定義ルーチンの例が含まれます。 Dynamic Server の終り デモンストレーション データベースを構築する方法の情報については、 「IBM Informix: DB-Access ユーザーズ ガイド」を参照してください。データベー スおよびその内容の説明については、「IBM Informix: SQL ガイド: 参照」を参照し てください。 デモンストレーション データベースをインストールするために使用するスクリプト は、UNIX プラットフォームでは $INFORMIXDIR/bin ディレクトリに、Windows 環境では %INFORMIXDIR%¥bin ディレクトリにあります。 Dynamic Server の新機能 SET COLLATION 文を使用して、DB_LOCALE が指定するものとは異なるロケー ルのローカライズ済み照合順序を指定できます。このローカライズ済み照合は、同 じセッションの各国語文字 (NCHAR) および各国語可変長文字 (NVARCHAR) 型の ソート操作に適用されます。照合順序が DB_LOCALE 設定と異なる場合、各国語 文字 (NCHAR) または各国語可変長文字 (NVARCHAR) 型値をソートするデータベ ース オブジェクトは、オブジェクトが作成されたときに有効になった照合順序を使 用します。 Dynamic Server V9.40 で提供される GLS ライブラリのバージョン 4.0 には、次の 新機能が追加されました。 v Unicode コード セット (UTF-8) の Unicode (ICU) インプリメンテーション用の オープン ソース各国対応コンポーネント v ICU Unicode 照合アルゴリズムを基にした Unicode 照合 (Unicode コード セット を使用するロケール内) v 中国語文字のための GB18030-2000 コード セットの完全サポート (Dynamic Server V9.40 の新しい機能の包括的なリストについては、「IBM Informix: スタートアップ ガイド」を参照してください。) 序 ix マニュアルの規則 本節では、このマニュアルで使用している規則について説明します。これらの規則 によって、マニュアル セットのこのボリュームと他のボリュームからの情報の収集 が容易になります。 次の規則について説明します。 v 文字の表記 v その他の規則 v 構文ダイヤグラム v コマンド行の規則 v コード例の表記 文字の表記 このマニュアルでは、新しい用語の紹介、画面表示の説明、コマンド構文の説明な どに次の規則を使用します。 規則 意味 KEYWORD プログラム言語の文における主要素 (キーワード) は、すべて大文字のセ リフ フォントで表示される。 italics italics italics テキストの場合、新しい用語および強調される単語はイタリックで表示さ れる。構文およびコード例の場合、ユーザが指定する可変値はイタリック で表示される。 boldface boldface プログラム エンティティ (クラス、イベント、および表など) の名前、 環境変数、ファイルおよびパスの名前、およびインターフェイス エレメ ント (アイコン、メニュー項目、およびボタンなど) は太文字で表示され る。 monospace monospace 製品によって表示される情報およびユーザが入力した情報は、モノスペー ス タイプフェースで表示される。 KEYSTROKE ユーザが押すキーは、大文字のサンセリフ フォントで表示される。 → この記号はメニュー項目を示す。たとえば、『「Tool」→「Options」を 選択』は、「Tools」メニューから「Options」を選択するという意味に なる。 ヒント: 文字を「入力する」またはコマンドを「実行する」という指示がある場 合、入力した後にすぐに Enter を押してください。テキストを「入力す る」または他のキーを「押す」という指示がある場合には、Enter を押す 必要はありません。 その他の規則 マニュアル全体を通して、いくつかの異なるタイプのマークアップで識別されるテ キストが見つかります。 コメント コメントは、次の例に示すように、3 つのタイプの情報を識別します。 x IBM Informix GLS: ユーザーズ ガイド 警告: きわめて重要な指示、注意、または重要な情報が含まれるパラグラフを識 別します。 重要: 説明されている機能または操作に関する重要な情報が含まれるパラグラフ を識別します。 ヒント: 説明されている機能に関する追加の詳細またはショートカットを提供す るパラグラフを識別します。 機能、製品、およびプラットフォーム 機能、製品、およびプラットフォームのマークアップは、機能固有、製品固有、ま たはプラットフォーム固有の情報が含まれるパラグラフを識別します。このマーク アップの例として、以下があります。 Dynamic Server IBM Informix Dynamic Server 固有の情報を識別します Dynamic Server の終り UNIX のみ UNIX プラットフォーム固有の情報を識別します。 UNIX のみ の終り Windows のみ Windows 環境固有の情報を識別します Windows のみ の終り このマークアップは、1 つの節の中で 1 つ以上のパラグラフに適用できます。節全 体が特定の製品またはプラットフォームに適用される場合には、次のように、その ことが見出しテキストの一部として示されます。 表ソート (Windows のみ) 構文ダイヤグラム このガイドでは、文およびシステム レベルのコマンド以外のすべてのコマンドの構 文を記述するために、次のコンポーネントで構成されるダイヤグラムを使用しま す。 注: IBM 標準に準拠するように、バージョン 9.4 から構文ダイヤグラムを改善しま した。 SQL とコマンド行文を表す構文ダイヤグラムが、次のように変更されました。 v 文の先頭および終わりにある記号が、最後の縦線の代わりに二重矢印になりまし た。 v 構文サブダイヤグラムの先頭および終わりにある記号が、矢印の代わりに縦線に なりました。 序 xi v 反復可能なループ回数を示す記号が、ゲート記号の数字の代わりにブラケットで 囲まれた数字になりました。 v 構文が複数行にわたる場合は、同じ行にループ ダウンする代わりに次の行に続行 するようになりました。 v 製品または条件に固有のパスが、アイコンの代わりに括弧内の肩文字番号でマー クされるようになりました。 次の表に構文ダイヤグラム コンポーネントを示します。 コンポーネント 意味 文の開始。 文が次の行に続く。完全な文以外の構文要素は、この記 号で終わります。 文が前の行から続く。完全な文以外の構文要素は、この 記号で始まります。 文の終り。 必須項目。 オプションの項目。 DBA TO CONNECT TO SELECT ON 必須項目を選択。項目を 1 つだけ選択して指定すること が必須です。 オプションの項目を選択。デフォルト値が存在する場合 は、太字で印刷されます。 オプションの項目。複数の項目を指定できますが、それ ぞれの繰り返しの前にカンマが必要です。 構文フラグメントの開始。 構文フラグメントの終了。 構文ダイヤグラムの読み方 次の構文ダイヤグラムは、前の節の表にリストされているいつかの要素を使用しま す。 変換を行わないジョブの作成 xii IBM Informix GLS: ユーザーズ ガイド onpladm create job job -n -d -p device -D database project -t table 実行モードの設定 -S server -T target このダイヤグラムの 2 行目には、実行モードの設定と呼ばれるフラグメントがあり ます。このフラグメントは、次のフラグメント ダイヤグラムに表示されます (ダイ ヤグラムはフラグメントの開始および終了コンポーネントを使用します)。 実行モードの設定: l c -f d p a u n N コマンドを正しく構築するには、コマンドの左上から開始します。必要な要素を組 み込みながら、ダイヤグラムを右に進みます。ダイヤグラムの中の要素は、大文字 と小文字を区別します。 「変換を行わないジョブの作成」ダイヤグラムは、次の手順を示しています。 1. onpladm create job と入力し、続いてジョブの名前を入力します。 2. オプションで、-p と入力し、続いてプロジェクトの名前を入力します。 3. 次の必須要素を入力します。 v -n v -d およびデバイスの名前 v -D およびデータベースの名前 v -t および表の名前 4. オプションで、次の要素を 1 つ以上選択して、任意の回数、反復して使用でき ます。 v -S およびサーバ名 v -T およびターゲット サーバ名 v 実行モード。実行モードを設定するには、「実行モードの設定」ダイヤグラム に従います。 -f と入力し、オプションで d、p、または a を入力してから、 オプションで l または u と入力します。 5. 終端記号については、ダイヤグラムに従ってください。 ダイヤグラムが完成しました。 キーワードと句読点 キーワードとは、文と、システム レベルのコマンドを除くすべてのコマンドの予約 済みの語です。構文ダイヤグラムにキーワードがある場合は、大文字で示されま 序 xiii す。コマンド内でキーワードを使用するときには大文字でも小文字でも書くことが できますが、構文ダイヤグラムに示されるとおりの正確なスペルにする必要があり ます。 文およびコマンド内の句読点も、構文ダイヤグラムに示されるとおりに正確に使用 する必要があります。 識別子と名前 変数は、構文ダイヤグラムと例の中にある識別子および名前の位置指定子として働 きます。コンテキストに応じて、変数を任意の名前、識別子、またはリテラルに置 き換えることができます。変数は、追加の構文ダイヤグラムに展開された複雑な構 文要素を表すためにも使用されます。変数が構文ダイヤグラム、例、またはテキス ト内で表される場合、小文字のイタリック で示されます。 以下の構文ダイヤグラムでは、単純な SELECT 文の一般形式を示すために、変数を 使用しています。 SELECT column_name FROM table_name この形式の SELECT 文を書くときは、変数 column_name および table_name を特 定の列名および表名に置き換えます。 コード例の表記 本書の全体に渡って、SQL コードの例があります。特に注記がある場合を除き、コ ードは、どの IBM Informix アプリケーション開発支援ツールにも固有なものでは ありません。 例の中に SQL 文だけがリストされている場合、それらの文はセミコロンで区切ら れていません。たとえば、次の例のようにコードが示されます。 CONNECT TO stores_demo ... DELETE FROM customer WHERE customer_num = 121 ... COMMIT WORK DISCONNECT CURRENT この SQL コードを特定の製品で使用するためには、その製品用の構文ルールを適 用する必要があります。たとえば、DB–Access を使用している場合には、複数の文 をセミコロンで区切る必要があります。 SQL API を使用している場合には、それ ぞれの文の最初に EXEC SQL を使用し、文の終りにセミコロン (または他の適切 な区切り記号) を使用する必要があります。 ヒント: コード例の中の省略記号の部分は、完全なアプリケーションではさらにコ ードが追加されるが、説明している概念を記述するためには、表示する必 要がないことを示しています。 特定のアプリケーション開発支援ツールまたは SQL API 用の SQL 文の使用に関 する詳細な指示については、その製品のマニュアルを参照してください。 xiv IBM Informix GLS: ユーザーズ ガイド 文字表現規則 本書では、シングルバイト文字とマルチバイト文字が表示される方法を例に示しま す。通常、マルチバイト文字は漢字 (日本語または中国語など) ですが、本書では実 際のマルチバイト文字は記述されません。その代わり、ASCII 文字を使用して、シ ングルバイト文字とマルチバイト文字の両方を表します。本節では、本書でマルチ バイト文字とシングルバイト文字を抽象的に表す方法を説明します。 シングルバイト文字 本書では、シングルバイト文字を一連の小文字として表します。 1 つのシングルバ イト文字を抽象的に表すフォーマットは次のとおりです。 a ここで a は、シングルバイト文字を表し、文字『a』自体を表すものではありませ ん。 シングルバイト文字の文字列を表すフォーマットは、次のとおりです。 a...z ここで a は先頭文字を表し、z は文字列の最後の文字を表します。たとえば、6 つ のシングルバイト文字から成る文字列 Ludwig の場合、次のフォーマットがこの 6 文字の文字列を抽象的に表します。 abcdef ヒント: 文字『s』は、シングルバイト文字の文字列を示す例には使用されません。 本書では、シングルバイト空白文字を表すために、文字『s』が記号として 予約されています。 xvi ページの『文字列内の空白文字』も参照してくだ さい。 マルチバイト文字 本書で使用しているテキスト、例、またはダイヤグラム内のマルチバイト文字は、 実際に表示される文字とは異なります。その代わり、次の規則でマルチバイト文字 が格納される方法を抽象的に示します。 A1...An 同一の大文字が 1 つから 4 つある場合は、異なる肩文字番号が各大文字の後に続 きます。これは 1 つのマルチバイト文字を示します。肩文字は、マルチバイト文字 の最初のバイトから n 番目のバイトを示します。表示されます。n には 2 から 4 の値が入ります。たとえば、次の記号は、2 バイトから成るマルチバイト文字を表 します。 A1A2 次の表記は、4 バイト (マルチバイト文字の最大長) から成るマルチバイト文字を表 します。 A1A2A3A4 次の例は、SQL 文内のマルチバイト文字の文字列を示します。 CREATE DATABASE A1A2B1B2C1C2D1D2E1E2; 序 xv この文は、名前が 5 つのマルチバイト文字 (それぞれが 2 バイトの長さを持つ) か ら成るデータベースを作成します。 SQL 識別子内のマルチバイト文字の使用につ いては、3-1 ページの『データベース オブジェクトの命名』を参照してください。 同じ文字列内のシングルバイト文字とマルチバイト文字 マルチバイト コード セットの場合は、文字列がシングルバイト文字とマルチバイ ト文字の両方で構成されることがあります。混合文字列を表すために、本書では単 にマルチバイト文字とシングルバイト文字のフォーマットを結合します。次の例で は、4 つの文字を持つ文字列を表します。ここで、最初と 4 番目の文字はシングル バイト文字で、2 番目と 3 番目の文字はそれぞれ 2 バイトから成るマルチバイト 文字です。 aA1A2B1B2b 文字列内の空白文字 空白は、空白を示す 1 つ以上の文字の列です。どの文字を空白にするかは、各 GLS ロケールが定義します。 たとえば、TAB (ASCII 9) と空白 (ASCII 32) が、あるロケールで空白文字として 定義される場合があります。しかし、別のロケールでは、CTRL キーと別の文字の 組み合せが、空白文字として定義される可能性があります。 本書でシングルバイト空白文字を表す規則は、文字『s』です。次の表記が 1 つの シングルバイト空白文字を表します。 s ASCII コード セットでは、シングルバイト空白文字の例は、空白文字 (ASCII 32) です。 2 つの ASCII 空白文字から成る文字列を示すために、本書では次の表記を 使用します。 ss 次の表記は、マルチバイト空白文字を表します。 s1...sn ここで S1 は、空白文字の最初のバイトを表し、sn は、空白文字の最後のバイトを 表します。n は、2 から 4 の範囲内の数字になります。次の表記は、1 つの 4 バ イト空白文字を表します。 s1s2s3s4 後続の空白文字 文字と空白の組み合せは、引用符付き文字列内、宣言された列長よりも少ない文字 を含む文字 (CHAR) 型列内、および他のコンテキスト内で使用される可能性があり ます。たとえば、シングルバイト コード セット内の CHAR(5) 列に 3 文字ある場 合は、その列の長さが列長と等しくなるように 2 つの空白で文字列が埋め込まれま す。 abcss 次の例は、5 文字の文字列 (3 つの文字データと 2 つの後続の空白文字) をマルチ バイト コード セットで表します。ここでは、データ文字と空白文字はそれぞれ 2 バイトから成ります。 xvi IBM Informix GLS: ユーザーズ ガイド A1A2B1B2C1C2s1s2s1s2 ロケールによっては、文字列はシングルバイトとマルチバイト両方の空白文字を含 むことができます。たとえば、次の文字列を検討してみます。 abcss1s2sss1s2 この文字列には、3 つのシングルバイト文字 (abc)、1 つのシングルバイト空白文字 (s)、1 つのマルチバイト空白文字 (s1s2)、2 つのシングルバイト空白文字 (ss)、およ び 1 つのマルチバイト空白文字 (s1s2) で構成されています。 関連マニュアル データベース サーバのマニュアルはさまざまなフォーマットで提供されています。 v オンライン マニュアル。 メディア パック内のマニュアル CD から製品マニュ アルを印刷できます。これと同じオンライン マニュアルを IBM Informix オンラ イン マニュアル サイト http://www-3.ibm.com/software/data/informix/pubs/library/ から取得できま す。 v オンライン ヘルプ。 この機能は、詳細ヘルプ、エラー・メッセージ解説書、言 語構文などを提供します。 v ドキュメント ノートとリリース ノート。 マニュアルの追加と修正を含むドキュ メント ノートと、データベース サーバを説明するリリース ノートは、製品がイ ンストールされているディレクトリに格納されています。これらのファイルには アプリケーションとパフォーマンスの問題に関する重大な情報が含まれているた め、内容を確認してください。 UNIX のみ デフォルト ロケールを使用する UNIX プラットフォーム上では、次のオンライ ン ファイルが $INFORMIXDIR/release/en_us/0333 ディレクトリに格納されま す。 UNIX のみ の終り 序 xvii オンライン ファイル 説明 本書のご使用のバージョン用のドキュメント ノート ファイルには、本書に記載されていないトピックや、 マニュアルの発行後に変更されたトピックについて記 載されています。 ids_unix_release_notes_9.40.html、リリース ノート ファイルには、以前のバージョンの ids_unix_release_notes_9.40.txt Dynamic Server とは異なる機能について、およびこれ (Dynamic Server 用) または らの相違点がご使用の製品に与える影響について記載 されています。また、このファイルには、既知の問題 xps_release_notes_8.40.html とその次善策に関する情報も含まれています。(.txt バ xps_release_notes_8.40.txt ージョンは ASCII テキスト フォーマットで表示で (Extended Parallel Server 用) き、.html バージョンはブラウザを使用して表示でき ます。) ids_machine_notes_9.40.txt マシン ノート ファイルには、ご使用のコンピュータ (Dynamic Server 用) または で IBM Informix 製品を構成および使用するために実 行する必要がある特殊な操作が記載されています。マ xps_machine_notes_8.40.txt シン ノートには、説明されている製品の名前が付けら (Extended Parallel Server 用) れています。 ids_gls_docnotes_9.40.html または xps_gls_docnotes_9.40.html Windows のみ 次の複数の項目が「Informix」フォルダに表示されます。このフォルダを表示する には、タスクバーから「スタート」→「プログラム」→「Informix」 →「Documentation Notes or Release Notes」を選択します。 Windows のみ の終り プログラム グループ項目 説明 Documentation Notes この項目には、マニュアルの追加または修正と、マニュア ルに記載されていない機能またはマニュアルの発行後に変 更された機能についての情報が含まれています。 Release Notes この項目には、前のバージョンの IBM Informix 製品とは 異なる機能、およびこれらの相違点が現行の製品に与える 影響が記載されています。また、このファイルには、既知 の問題とその次善策に関する情報も含まれています。 マシン ノートは Windows プラットフォームには適用されません。 v エラー メッセージ ファイル。IBM Informix ソフトウェア製品には、エラー メ ッセージおよびその修正処置が記載された ASCII ファイルが備わっています。 UNIX のみ UNIX でエラー メッセージを読むには、finderr コマンドを使用してエラー メッ セージをオンラインで表示できます。 xviii IBM Informix GLS: ユーザーズ ガイド Windows のみ Windows でエラー メッセージと修正処置を読むには、Informix Error Messages ユーティリティを使用します。このユーティリティを表示するには、 タスクバーから「スタート」→「プログラム」→「Informix」を選択してくださ い。 Windows のみ の終り 参考文献 データベース サーバとオペレーティング システム プラットフォームの概要を提供 する資料のリストについては、「IBM Informix: スタートアップ ガイド」を参照し てください。 業界標準への対応 米国規格協会 (ANSI) では、SQL 用の 1 組の業界標準を確立しています。 IBM Informix SQL ベースの製品は、SQL-92 Entry Level (ANSI X3.135-1992 とし て公開) に完全に準拠しています。これは ISO 9075:1992 と同一です。さらに、 Informix データベース サーバの多くの機能が、SQL-92 の Intermediate Level と Full Level、および X/Open SQL CAE (共通アプリケーション環境) 標準に準拠して います。 序 xix xx IBM Informix GLS: ユーザーズ ガイド 第 1 章 GLS 基本機能 本章の概要 広域言語サポート (GLS) 機能により、IBM Informix 製品を使用して、アジア、ア フリカ、ヨーロッパ、ラテン アメリカ、中東の諸国のさまざまな言語、文化上の慣 習、およびコード セットを処理できます。 GLS 機能により、弁別発音記号、照合順序、選択した言語の通貨および時刻表現の 規則を使用して、データベースを作成できます。 ONCONFIG 構成パラメータは GLS には存在しませんが、適切な環境変数を設定する必要があります。 本章では、基本概念を紹介し、GLS 機能について説明します。本章には、次の節が あります。 v GLS 機能の使用 v GLS ロケールの理解 v GLS ロケールの設定 v IBM Informix 製品での GLS ロケールの使用 v エンド ユーザ フォーマットのカスタマイズ GLS 機能の使用 データベース アプリケーションでは、データベース サーバとクライアント アプリ ケーションが実行するタスクの中に、処理するデータの言語および国/地域別環境の 規則により異なるものがあります。たとえば、データベース サーバは、米国英語 (U.S. English) データを、韓国語の文字データとは別々にソートする必要がありま す。クライアント アプリケーションは、カナダの通貨をタイの通貨とは別々に表示 する必要があります。 Informix データベース サーバまたはクライアント製品にこれらのデータ依存タスク を実行するコードが含まれていた場合、それぞれのデータベース サーバまたはクラ イアント製品を特別に作成して、文化的差異に基づいたデータの、異なる集合を処 理する必要があります。 GLS のサポートにより、IBM Informix 製品では、文化的差異に基づいた情報を直 接処理する方法を指定する必要がなくなりました。文化的差異に基づいた情報は、 GLS ロケールにあります。 IBM Informix 製品が文化的差異に基づいた情報を必要 とするときは、GLS ライブラリを呼び出します。ライブラリは GLS ロケールにア クセスし、情報を IBM Informix 製品に戻します。 GLS 機能とは、文化的差異に基づいた情報をサポートするための移植可能な方法で す。多数のオペレーティング システムで英語でないデータがサポートされています が、通常、そのオペレーティング システムに特有の形式でサポートされます。文化 的差異に基づいた情報のフォーマットには、多数の標準は存在しません。このよう な整合性の欠如は、あるオペレーティング システム環境から別のオペレーティング システム環境にアプリケーションを移動する場合に、アプリケーションがオペレー © Copyright IBM Corp. 1996, 2003 1 ティング システムから言語サポートを要求する方法を変更する必要がある場合があ ることを意味します。最初の環境により提供された言語サポートと同一の内容が、 新しいオペレーティング システム環境では提供されないことが判明する可能性さえ あります。 GLS 機能により、UNIX または Windows オペレーティング システム上の文化的差 異に基づいた情報にアクセスできます。 IBM Informix 製品は、その製品が移植さ れたどのプラットフォーム上でも、ロケール情報を見つけることができます。 Windows のみ GLS がデフォルトでないロケールをサポートするには、使用中の Windows のバー ジョンも、そのロケールをサポートしている必要があります。すなわち、日本語ク ライアント アプリケーションは、Windows の日本語バージョン上で実行されない 限り、Windows 上でサポートされません。 Windows のみ の終り GLS 機能を使用する場合、実行する必要があるタスクは、あなたがシステム管理 者、データベース管理者、クライアント アプリケーションのエンド ユーザ、デー タベース サーバ ユーティリティのエンド ユーザ、またはクライアント アプリケ ーション開発者のいずれであるかにより異なります。次の表は、オプショナル タス クと必須タスクをリストにしたものです。 対象読者 オプショナル タスク 必須タスク なし システム管理者、 v デフォルトでないロケールの場合、 データベース管理 DB_LOCALE、CLIENT_LOCALE、およ 者、またはクライ び SERVER_LOCALE 環境変数を設定し アント アプリケ ます。 ーションのエンド v エンド ユーザ フォーマットをカスタマイ ユーザ ズするには、GL_DATE、 GL_DATETIME、および DBMONEY 環境 変数を設定します。 ESQL/C の場合、 GL_DATETIME ではなく DBTIME を設 定できます。 2 IBM Informix GLS: ユーザーズ ガイド 対象読者 オプショナル タスク 必須タスク v ESQL/C の GLS 環境を構成するには、 CC8BITLEVEL および ESQLMF 環境変 数を設定します。 v GLS 環境の追加構成を実行するには、 DBLANG および GLS8BITFSYS 環境変 数を設定します。 v SQL 文を発行するには、61 ページの『第 3 章 SQL 機能』と 103 ページの『第 4 章 データベース サーバの機能』のガイド ラインに従ってください。 v GLS ファイルを削除するには、164 ペー ジの『未使用ファイルの削除』のガイドラ インに従ってください。 v UNIX 上の GLS ファイルに関する情報を 入手するには、165 ページの『glfiles ユー ティリティ (UNIX のみ)』のガイドライン に従ってください。 データベース サ ーバ ユーティリ ティのエンド ユ ーザ 同上 クライアント ア v 同上 プリケーション開 v 各国対応クライアント アプリケーション 発者 を開発するには、 126 ページの『クライ アント アプリケーションの国際化』と 「IBM Informix: GLS Programmer’s Manual」のガイドラインに従ってくださ い。 106 ページの『ユーティリ ティに対するロケール特有 のサポート』のガイドライ ンに従ってください。 v 123 ページの『第 5 章 一般的な SQL API 機 能』のガイドラインに従 ってください。 v ESQL/C アプリケーショ ンの場合、 133 ページの 『第 6 章 IBM Informix ESQL/C 機能』のガイド ラインにも従ってくださ い。 IBM Informix 製品による GLS サポート GLS サポートは、これらの IBM Informix 製品およびユーティリティに対して提供 されます。 v Informix データベース サーバ v IBM Informix クライアント アプリケーションおよびデータベース サーバ ユー ティリティ v IBM Informix GLS アプリケーション プログラム インターフェイス これ以降の節では、GLS サポートが初めの 2 種類の IBM Informix 製品に提供す る機能の概要について説明します。 英語以外のデータが含まれるデータベースのデータベース サーバのマイグレーショ ン方法については、「IBM Informix: 移行ガイド」を参照してください。 第 1 章 GLS 基本機能 3 Informix データベース サーバ GLS が、IBM Informix OnLine Dynamic Server に導入されました。以前は、アジア 言語 (マルチバイト) 文字を使用する、英語以外のデータベースには ALS 言語サポ ートが提供され、シングルバイト文字を使用する、英語以外のデータベースには NLS 言語サポートが提供されていました。 GLS は、単一の機能であり、英語以外 の言語のシングルバイト データとマルチバイト データをサポートします。下位方 向の互換性に関しては、GLS 製品は、すべての NLS 環境変数と、ALS 環境変数の サブセットもサポートします。これらの変数のリストについては、「IBM Informix: 移行ガイド」を参照してください。 文化的差異に基づいた機能: GLS 機能を使用すると、Informix データベース サー バで、次のような文化的差異に基づいた機能がサポートされます。 v 非 ASCII 文字および文字列の処理 非 ASCII 文字を使用して、表、列、ビュー、文、カーソル、および SPL ルーチ ンのようなユーザ指定が可能なデータベース オブジェクトを命名でき、かつ、地 域の習慣に適した照合順序を使用できます。 多くのその他のコンテキストにも、非 ASCII 文字を使用できます。たとえば、非 ASCII 文字を使用して、SELECT 文の WHERE および ORDER BY 節を指定し たり、各国語文字 (NCHAR) 型および各国語可変長文字 (NVARCHAR) 型列のデ ータをソートしたりできます。既存のコードを変更せずに GLS 照合機能を使用 することが可能です。 v 式の評価 各国語文字 (NCHAR) 型および各国語可変長文字 (NVARCHAR) 型のデータを含 む式を比較するときに、非 ASCII 文字を使用できます。 v 日付、時刻、数値データ、および通貨データのロケール特有の値の変換 米国 (U.S) 以外の国または国/地域別環境に特有のエンド ユーザ フォーマットを 使用して、リテラル文字列中に表示されるときの日付、時刻、数値、および通貨 値を指定できます。データベース サーバは、これらのフォーマットを適切な内部 データベース フォーマットに変換できます。 v 以前は互換性がなかった文字コード セットのアクセス性 クライアント アプリケーションは変換可能なコード セット間のコード セット変 換を実行でき、それにより、コード セットの異なるデータベースとクライアント との間でのデータへのアクセスおよびデータの共有を行うことができます。コー ド セット変換について詳しくは、30 ページの『コード セット変換の実行』を参 照してください。 IBM Informix クライアント アプリケーションおよびユーティリティ 一般に、クライアント アプリケーションとは、ネットワーク上のワークステーショ ンまたは PC 上で実行されるプログラムです。 GLS 機能にとっては、クライアン ト アプリケーション は、IBM Informix SQL API 製品 (IBM Informix ESQL/C な ど) か、または Informix データベース サーバ ユーティリティ (DB–Access、 dbexport、または onmode など) のいずれかになります。これらの IBM Informix クライアント アプリケーションは、GLS 機能をサポートします。 v Informix データベース サーバとともに提供される DB–Access ユーティリティを 使用すると、表、列、ビュー、文、カーソル、および SPL ルーチンなど、ユー ザが指定できるデータベース オブジェクトに非 ASCII 文字を使用したり、ロー 4 IBM Informix GLS: ユーザーズ ガイド カライズされた照合ルールに基づいてこれらのオブジェクトをソートできます。 識別子について詳しくは、63 ページの『識別子内の非 ASCII 文字』を参照して ください。 DB–Access の一般情報については、「IBM Informix: DB-Access ユー ザーズ ガイド」を参照してください。 v SQL API を使用すると、表、列、ビュー、文、カーソル、SPL ルーチンなどユ ーザが指定できるデータベース オブジェクトの名前だけでなく、ホスト変数名と 標識変数名にも非 ASCII 文字を使用できます。詳しくは、 123 ページの『第 5 章 一般的な SQL API 機能』を参照してください。 v dbexport または onmode などのデータベース サーバ ユーティリティを使用す ると、多数のコマンド行引数に非 ASCII 文字を使用できます。詳しくは、 103 ペ ージの『第 4 章 データベース サーバの機能』を参照してください。 v GLS は、IBM Informix Dynamic 4GL (バージョン 3.0 およびそれ以降)、 IBM Informix 4GL (バージョン 7.2 およびそれ以降)、および IBM Informix SQL (バージョン 7.2 およびそれ以降) の機能でもあります。 GLS インプリメンテー ションの詳細については、これらの IBM Informix 製品のマニュアルを参照して ください。 IBM Informix GLS アプリケーション プログラミング インターフェ イス IBM Informix GLS とは、アプリケーション プログラム インターフェイス (API) であり、これを使用して、DataBlade モジュールの開発者や ESQL/C プログラマー が C 言語インターフェイスで各国対応アプリケーションを開発できます。 IBM Informix GLS のマクロおよび関数により、アプリケーション中で GLS ロケー ルにアクセスできます。このロケールには、文化的差異に基づいた情報が含まれま す。 IBM Informix GLS を使用して、さまざまな言語、文化上の慣習、コード セ ットを処理するプログラムを作成 (または既存のプログラムを変更) できます。 すべての IBM Informix GLS 関数は 現行処理ロケール にアクセスします。現行処 理ロケールとは、アプリケーションで現在有効なロケールです。これは、(ESQL/C クライアント アプリケーションとクライアント LIBMI アプリケーションの場合に は) クライアント ロケールに、(DataBlade ユーザ定義ルーチンの場合には) サーバ 処理ロケールに基づきます。 IBM Informix GLS には、次の各国対応タスクの実行に役立つマクロおよび関数が 備わっています。 v シングルバイト文字、マルチバイト文字、およびワイド文字の処理 v シングルバイト文字列、マルチバイト文字列、およびワイド文字文字列の処理 v マルチバイト文字列およびワイド文字文字列のメモリ管理 v 日付、時刻、金額、および数値文字列をバイナリ値に変換、またはバイナリ値か ら日付、時刻、金額、および数値文字列に変換 v マルチバイト文字の入力ストリームおよび出力ストリームの処理 IBM Informix クライアント アプリケーションは、データベース サーバと同様に IBM Informix GLS にアクセスできます。アプリケーションの場合、アプリケーシ ョンの IBM Informix GLS ライブラリにリンクして、ロケール関連のタスクを実行 第 1 章 GLS 基本機能 5 します。 Informix データベース サーバは、IBM Informix GLS ライブラリを自動 的にインクルードします。詳しくは、「IBM Informix: GLS Programmer’s Manual」 を参照してください。 サポートされるデータ型 GLS 機能は、次のデータ型をサポートします。 v SQL 文字データ型 – 文字 (CHAR) 型、可変長文字 (VARCHAR) 型、各国語文字 (NCHAR) 型、お よび各国語可変長文字 (NVARCHAR) 型 Dynamic Server – ラージ可変長文字 (LVARCHAR) 型 Dynamic Server の終り – テキスト (TEXT) 型およびバイト (BYTE) 型 文字データ型に関する GLS の考慮事項の情報については、68 ページの『文字デ ータ型の使用』を参照してください。 v SQL 数値と金額 (MONEY) 型 数値と金額 (MONEY) 型に関する GLS の考慮事項の情報については、14 ペー ジの『数値および通貨フォーマット』を参照してください。 v SQL 日付 (DATE) 型と日時 (DATETIME) 型 日付 (DATE) 型および日時 (DATETIME) 型に関する GLS の考慮事項の情報に ついては、14 ページの『日付および時刻フォーマット』を参照してください。 Dynamic Server v ユーザ定義データ型 – 不透明 (opaque) 型 – 複合データ型 – ディスティンクト (DISTINCT) 型 v スマート ラージ オブジェクト – バイナリ ラージ オブジェクト (BLOB) 型 – 文字ラージ オブジェクト (CLOB) 型 ユーザ定義データ型とスマート ラージ オブジェクトに関する GLS の考慮事項 については、 97 ページの『拡張データ型の処理 (IDS のみ)』を参照してくださ い。 Dynamic Server の終り v ESQL/C 文字データ型 – 文字 (CHAR) 型 – 固定長文字 (fixchar) 型 – 文字列 (string) 型 6 IBM Informix GLS: ユーザーズ ガイド – 可変長文字 (VARCHAR) 型 – ラージ可変長文字 (LVARCHAR) 型 ESQL/C データ型に関する情報は、「IBM Informix: ESQL/C Programmer’s Manual」を参照してください。 追加の GLS サポート IBM Informix 製品には、GLS ロケール ファイルのコア セットが組み込まれてい ます。これには、デフォルト ロケールと、英語、西ヨーロッパ、東ヨーロッパ、ア ジア、アフリカ地域をサポートする多くのロケールが含まれています。お使いの言 語および地域をサポートするロケールが見つからない場合、各国語サプリメント (ILS) 製品の追加のロケールを入手できます。ILS は、使用可能なすべての GLS ロ ケールおよび変換ファイルを提供します。 ILS には、いくつかのヨーロッパ言語を サポートするエラー メッセージも含まれています。 GLS ロケールと IBM Informix の各国語のサプリメントに関して詳しくは、販売代 理店にお問い合わせください。カスタマイズ済みメッセージ ファイルの作成方法に ついて詳しくは、34 ページの『メッセージ ファイルの探索』を参照してくださ い。 GLS ロケールの理解 クライアント/サーバ環境では、アプリケーション データを正しく処理するには、デ ータベース サーバとクライアント アプリケーションの両方がデータがどの言語で あるかを認識している必要があります。 GLS ロケールは Informix ファイルの集合 であり、これには、所定の文化、言語、または地域に特有のデータに関する情報が まとめられています。特に、GLS ロケールは、以下を指定できます。 v アプリケーション データが使用するコード セットの名前 v コード セット中の文字の分類 v 文字データに使用する照合 (ソート) 順序 v 通貨、数値、日付、および時刻データのエンド ユーザ フォーマット IBM Informix 製品は、次の GLS ファイルを使用して、ロケール関連の情報を取得 します。詳しくは、 153 ページの『GLS ファイルの管理』を参照してください。 GLS ファイルの タイプ GLS ロケール フ ァイル コード セット フ ァイル コード セット変換 ファイル レジストリ ファイ ル 説明 言語、地域、書字方向、およびその他の文化上の慣習を指定します。 文字セット内のそれぞれの論理的な文字を、一意のビット パターンにマ ップする方法を指定します。 「ソース」コード セット内のそれぞれの文字を、「ターゲット」コード セット内の対応する文字にマップする方法を指定します。 コード セット名と別名を、ロケール ファイルとコード セット変換ファ イルのファイル名を指定するコード セット番号と関連付けます。 それぞれのデータベースのロケール数は 1 つに制限されていますが、同一のデータ ベース サーバの異なるデータベースで異なるロケールをサポートできます。 第 1 章 GLS 基本機能 7 Unicode コード セット (UTF-8) のオープン ソース International Components for Unicode (ICU) インプリメンテーションを使用して、さまざまな文字セットを必要と する複数の言語からの文字データを 1 つのデータベースに保管できます。このコー ド セットは、多数の言語および地域の GLS データベース サーバ ロケールで使用 できます。(クライアント サイドのシステムのロケールには、ICU コード セット UTF-16 と UTF-32 に加え、ICU コード セット UTF-8 もサポートするものもあり ます。) Dynamic Server Dynamic Server の SET COLLATION 文は、各国語文字 (NCHAR) 型および各国語 可変長文字 (NVARCHAR) 型文字列をソートするための、複数のローカライズされ た照合順序をサポートします。 Dynamic Server の終り 文字データのコード セット 文字セット とは、1 つ以上の自然言語のアルファベットに、数字、句読点、発音区 別記号の記号を加えたものです。それぞれの文字セットには少なくとも 1 つのコー ド セット があり、その文字を一意のビット パターンにマップします。これらのビ ット パターンは、コード ポイント と呼ばれます。 ASCII、ISO8859-1、Windows コード ページ 1252、および EBCDIC は、英語をサポートするコード セットの例 です。 言語内の一意の文字の数により、それぞれの文字がコード セット内で必要とする記 憶域の量が決定されます。シングルバイトでは 0 から 255 の範囲の値を保管でき るため、256 文字を一意に識別できます。ほとんどの西洋の言語の文字数は 256 文 字より少ないため、これらの言語はシングルバイト文字 で構成されるコード セッ トを持ちます。アプリケーションがそのようなコード セットのデータを処理すると き、 1 バイトに 1 文字が保管されると想定できます。 ASCII コード セットには 128 文字が含まれます。したがって、それぞれの文字ご とのコード ポイントには 1 バイトのうち 7 ビットが必要です。 0 から 128 の範 囲のコード ポイントのシングルバイト文字は、ASCII または 7 ビット文字 と呼ば れることがあります。 ASCII コード セットはシングルバイトのコード セットであ り、IBM Informix 製品がサポートするすべてのコード セットのサブセットです。 コード セットに 128 文字より多くの文字が含まれる場合、その文字のいくつかの コード ポイントが、バイトの 8 番目のビットを設定する必要があります。これら の非 ASCII 文字は、次の文字の種類のいずれかである場合があります。 v 8 ビット文字 8 ビット文字は、コード ポイントの範囲が 128 から 255 のシングルバイト文字 です。 ISO8859-1 コード セットまたは Windows コード ページ 1252 の例に は、英語でない é、ñ、および ö 文字が含まれます。ソフトウェアが 8 ビット透 過 である場合に限り、これらの文字を正しく解釈できます。詳しくは、45 ペー ジの『GLS8BITFSYS』を参照してください。 v マルチバイト文字 8 IBM Informix GLS: ユーザーズ ガイド 文字セットに 256 文字以上が含まれる場合、そのコード セットはマルチバイト 文字を含む必要があります。マルチバイト文字は、2 から 4 バイトの記憶域を必 要とする場合もあります。東アジアのロケールには、何千もの漢字を組み込むこ とができる文字セットをサポートするものもあります。GLS は、たとえば、ほぼ 1,400 万のコード ポイントを含む統一中国語 GB18030-2000 コード セットを完 全にサポートしています。そのような言語のコード セットには、シングルバイト 文字とマルチバイト文字の両方が含まれます。これらのコード セットは、マルチ バイト コード セットと呼ばれます。 別の例としては、日本語の SJIS コード セット内のいくつかの文字は 2 または 3 バイトです。マルチバイト コード セットのデータを処理するアプリケーション は、1 文字が 1 バイトの記憶域を使用すると想定できません。 ヒント: 本書では、「非 ASCII 文字」という用語は、 127 より大きいコード ポイ ントを持つすべての文字に適用されます。非 ASCII 文字には、8 ビット文 字とマルチバイト文字の両方が含まれます。 IBM Informix 製品は、シングルバイト コード セットまたはマルチバイト コード セットをサポートできます。非 ASCII 文字をサポートする GLS ロケールの例につ いては、24 ページの『非 ASCII 文字のサポート』を参照してください。 ヒント: 本書では、例を使用して、シングルバイト文字およびマルチバイト文字が どのように表示されるかを示しています。マルチバイト文字は通常 (日本語 の文字または中国語の文字など) 漢字であるため、本書では実際のマルチバ イト文字は使用しません。その代わり、ASCII 文字を使用して、シングル バイト文字とマルチバイト文字の両方を表します。詳しくは、『序』の x ページの『文字の表記』を参照してください。 コード セットの文字クラス GLS ロケールは、1 つのコード セットの文字を文字クラス にグループ化します。 それぞれのクラスには、関連した目的を持つ文字が含まれます。 GLS は 12 クラ スをサポートします。文字クラスの内容は言語特有にできます。たとえば、lower ク ラスには、1 つのコード セットのすべての英小文字が含まれます。デフォルト ロ ケールのコード セットは、a から z までの文字を lower クラスにグループ化しま す。このクラスには、á、è、î、õ、ü など、その他の小文字も含まれます。 国際化するには、アプリケーションは、指定の文字クラスにどの文字が属するかを 想定してはいけません。その代わり、IBM Informix GLS ライブラリ関数を使用し て特定の文字のクラスを識別します。使用する IBM Informix GLS 関数、文字クラ スのリスト、それぞれのクラスに含まれる文字の情報については、「IBM Informix: GLS Programmer’s Manual」を参照してください。 文字データの照合順序 照合とは、何らかの順序にしたがって文字列をソートするプロセスです。データベ ース サーバまたはクライアント アプリケーションが、照合を実行できます。 照合順序は、SQL SELECT 文の次のタスクに影響します。 v WHERE 節内の論理述部 第 1 章 GLS 基本機能 9 SELECT * FROM tab1 WHERE col1 > ’bob’ SELECT * FROM tab1 WHERE site BETWEEN ’abc’ AND ’xyz’ v ORDER BY 節により作成されるソート済みデータ SELECT * FROM tab1 ORDER BY col1 v MATCHES 節および LIKE 節での比較 SELECT * FROM tab1 WHERE col1 MATCHES ’a1*’ SELECT * FROM tab1 WHERE col1 LIKE ’dog’ SELECT * FROM tab1 WHERE col1 MATCHES ’abc[a-z]’ データベース ロケールにより SELECT 文が受ける影響について詳しくは、 83 ペ ージの『CREATE INDEX 内の照合順序』を参照してください。 Informix データベース サーバは、次の 2 つの照合方法をサポートします。 v コード セット順序 (コード セット内の最初の文字から最後の文字へという順序) v ローカライズ順序 (ロケールがローカライズ順序を定義する場合) コード セット順序 コード セット順序 では、コード セット内の文字の順序が参照されます。コード セット内のコード ポイントの順序により、照合順序が決定されます。たとえば、 ASCII コード セットでは、A=65 で B=66 です。コード ポイント 65 はコード ポ イント 66 より小さいため、文字 A は常に B の前にソートされます。しかし、 a=97、M=77 であるため、文字列 abc は Me の後にソートされます。これは、常 に、好ましい結果であるとは限りません。 データベース サーバは、コード セット順序を使用して次のデータ型の列をソート します。 v 文字 (CHAR) 型 Dynamic Server v ラージ可変長文字 (LVARCHAR) 型 Dynamic Server の終り v 可変長文字 (VARCHAR) 型 v テキスト (TEXT) 型 IBM Informix 製品がサポートするすべてのコード セットには、ASCII 文字が最初 の 127 文字として含まれます。したがって、コード セット内の他の文字のコード ポイントは 128 以上になります。データベース サーバがこれらのデータ型をソー トすると、ソートされた内容には、非 ASCII 文字で始まる文字列の前に、ASCII 文 字で始まる文字列が置かれます。 コード セット順序にソートされたデータの例は、84 ページの表 2 を参照してくだ さい。 ローカライズ順序 ローカライズ順序 では、自然言語に関連する文字の順序が参照されます。ロケール は、ローカライズ順序での文字の順序を定義します。たとえば、文字 À のコード 10 IBM Informix GLS: ユーザーズ ガイド ポイントは 133 であっても、ローカライズ順序ではこの文字は A の後ろで、かつ B の前 (A=65、À=133、B=66) にリストされます。この場合、文字列 ÀB は AC の前 で、BD より後ろにソートされます。 データベース サーバは、コード セット順序を使用して次のデータ型の列をソート します。 v 各国語文字 (NCHAR) 型 v 各国語可変長文字 (NVARCHAR) 型 ローカライズ順序には等価文字 (データベースが文字を照合したときに、等価と見 なす文字) を含めることができます。たとえば、ロケールがローカライズ順序では 文字の大文字および小文字を等価であると定義する場合、文字列 Arizona、 ARIZONA、arizona という 3 つの文字列は、すべて同一文字列であるかのように一 緒に照合されます。 ヒント: ロケール ファイルの COLLATION カテゴリが存在する場合、このカテゴ リがローカライズ順序を指定します。詳しくは、155 ページの 『COLLATION カテゴリ』を参照してください。 ローカライズ順序では、特定のタイプの照合も指定できます。たとえば、電話帳で は次のソート順が必要です。 Mabin McDonald MacDonald Madden しかし、辞書では、同一の名前に対して次の照合順序を使用する場合があります。 Mabin Madden MacDonald McDonald GLS ロケールがローカライズ順序を定義する場合、データベース サーバは、この ローカライズ順序で各国語文字 (NCHAR) 型列と各国語可変長文字 (NVARCHAR) 型列のデータをソートします。ローカライズ順序でソートされたデータの例につい ては、84 ページの表 3 を参照してください。 Dynamic Server Dynamic Server は SET COLLATION 文をサポートしています。この文によって、 DB_LOCALE の設定とは異なるローカライズ済み照合を指定できます。デフォルト でない照合順序の有効範囲は現行セッションですが、インデックスまたはトリガな ど、照合を実行するデータベース オブジェクトは、各国語文字 (NCHAR) 型値また は各国語可変長文字 (NVARCHAR) 型値をソートするとき、そのデータベース オブ ジェクトの作成時点から照合順序を使用します。 Dynamic Server の終り Unicode 照合 Unicode コード セット (UTF-8) のオープン ソース International Components for Unicode (ICU) インプリメンテーションは、多数の言語および地域の GLS ロケール 第 1 章 GLS 基本機能 11 で使用できます。たとえば、en_us.utf8 ロケールは Unicode コード セットをサポ ートします。 ICU について詳しくは、ICU の Web サイト (http://oss.software.ibm.com/icu/) を参照してください。 Unicode コード セット (UIF-8) を使用する GLS ロケールは、ICU Unicode 照合ア ルゴリズムにより、各国語文字 (NCHAR) 型データと各国語可変長文字 (NVARCHAR) 型データの Unicode 照合をサポートします。このアルゴリズムにつ いて詳しくは、Unicode の Web サイト (http://www.unicode.org/unicode/reports/tr10) を参照してください。 照合サポート Informix データベース サーバによる照合は、データベースの列のデータ型により異 なります。次の表は、照合ルールを要約したものです。 列のデータ型 照合順序 文字 (CHAR) 型、可変長文字 (VARCHAR) 型、テキス ト (TEXT) 型 ラージ可変長文字 (LVARCHAR) 型 (IDS のみ) 各国語文字 (NCHAR) 型、各国語可変長文字 (NVARCHAR) 型 コード セット順序 コード セット順序 ローカライズ順序 照合の違いは、文字 (CHAR) 型と各国語文字 (NCHAR) 型の区別と、可変長文字 (VARCHAR) 型と各国語可変長文字 (NVARCHAR) 型の区別のみです。照合につい て詳しくは、68 ページの『文字データ型の使用』を参照してください。ロケールが ローカライズ順序を定義していない場合、データベース サーバは、各国語文字 (NCHAR) 型データ値と各国語可変長文字 (NVARCHAR) 型データ値をコード セッ ト順序で照合します。 重要: 文字 (CHAR) 型、ラージ可変長文字 (LVARCHAR) 型、および可変長文字 (VCHAR) 型の値は常にコード セット順序にソートされるという一般ルール には、例外があります。 MATCHES 演算子を定義した場合、この演算子は、 データ型に関係なく、常にローカライズ順序を使用して文字値の範囲式を評 価します。 87 ページの『MATCHES 条件』を参照してください。 エンド ユーザ フォーマット エンド ユーザ フォーマット とは、クライアント アプリケーションで、リテラル 文字列または文字変数としてデータ値を表示または入力するフォーマットです。 エンド ユーザ フォーマットは、データベースのデータ型のフォーマットがユーザ が使い慣れているフォーマットと異なる場合に役立ちます。データベース サーバ は、日付 (DATE) 型、日時 (DATETIME) 型、金額 (MONEY) 型、および数値デー タ型のデータを、圧縮内部フォーマットでデータベース内に格納します。 たとえば、データベース サーバは、日付 (DATE) 型値を 1899 年 12 月 31 日か らの日数の整数で格納します。したがって、日付 03/19/96 は 35142 になります。 この内部フォーマットは、直感的にわかるものではありません。 クライアント アプリケーションで内部フォーマットの代わりにより直感的なフォー ムを使用できるように、IBM Informix 製品はエンド ユーザ フォーマットをサポー 12 IBM Informix GLS: ユーザーズ ガイド トします。リテラル文字列または文字変数を、列の値または SQL API ライブラリ 関数の引数として SQL 文で使用できます。 IBM Informix 製品は、文字列 (リテラル文字列または文字変数内の値) が見つかっ たとき、次の状況でエンド ユーザ フォーマットを使用します。 v IBM Informix 製品が文字列を読み取るときに、エンド ユーザ フォーマットを使 用して文字列の解釈方法を決定するため、文字列を数値に変換できます。 たとえば、DB–Access で、クライアント ロケールがデフォルト (米国英語 (U.S. English)) であるとします。次の INSERT 文のリテラルの日付は、デフォルト ロ ケールが定義する日付のエンド ユーザ フォーマットを使用しています。 INSERT INTO mytab ( date1 ) VALUES ( ’03/19/96’ ) クライアント アプリケーションからデータを受信すると、データベース サーバ はエンド ユーザ フォーマットを使用してこのリテラルの日付を解釈するため、 対応する内部フォーマット (35142) に変換できます。 v IBM Informix 製品が文字列を出力するときに、エンド ユーザ フォーマットを使 用して数値を文字列としてフォーマットする方法を決定します。 たとえば、ESQL/C クライアント アプリケーションのクライアント ロケールが フランス語ロケールで、このロケールは日付を dd/mm/yy としてフォーマットす る日付エンド ユーザ フォーマットを定義すると仮定します。次の rdatestr() 関 数は、日付のエンド ユーザ フォーマットを使用して datestr 文字変数の値を取 得します。 err = rdatestr(jdate, datestr); rdatestr() 関数は datestr 変数に値を書き込む前に、エンド ユーザ フォーマッ トを使用して日付ストリングとして内部フォーマット (35142) をフォーマットす る方法を決定します。 GLS 機能が SQL API ライブラリ関数に与える影響につ いて詳しくは、140 ページの『拡張 ESQL/C ライブラリ関数の使用』を参照して ください。 GLS ロケールは、次のタイプのデータのエンド ユーザ フォーマットを定義しま す。 v 通貨表記および数値のフォーマットの表現 v 日付および時刻の値の表現 指定の国または地域別環境に特有のエンド ユーザ フォーマットで、数値、通貨、 日付、および時刻の値を指定できます。 重要: 日付、時刻、数値、通貨の値のエンド ユーザ フォーマットは、データベー ス内の対応するデータ型の内部フォーマットには影響しません。これらのフ ォーマットは、クライアント アプリケーションによるそのデータの表示方法 と、データ入力の解釈方法のみに影響します。 次の表は、エンド ユーザ フォーマットを使用するそれぞれのデータ型ごとに、エ ンド ユーザ フォーマットを定義する値をリストしたものです。環境変数の詳細に ついては、 37 ページの『第 2 章 GLS 環境変数』を参照してください。ロケール カテゴリに関する情報については、 153 ページの『GLS ファイルの管理』を参照し てください。 第 1 章 GLS 基本機能 13 データ型 環境変数 ロケール カテゴリ 日付 (DATE) 型 日時 (DATETIME) 型 時間隔 (INTERVAL) 型 金額 (MONEY) 型 数値 (10 進数 (DEC) 型、10 進数 (DECIMAL) 型、実数 (DOUBLE PRECISION) 型、実数 (FLOAT) 型、整数 (INT) 型、8 バイト整数 (INT8) 型、整数 (INTEGER) 型、10 進数 (NUMERIC) 型、 小桁実数 (REAL) 型、小桁実数 (SMALLFLOAT) 型、小桁整数 (SMALLINT) 型) GL_DATE GL_DATE GL_DATETIME DBMONEY なし TIME TIME MONETARY NUMERIC 数値および通貨フォーマット IBM Informix 製品は数値または通貨データを含む文字列を読み取るとき、エンド ユーザ フォーマットを使用して、この文字列をデータベースの列の内部値に変換す る方法を決定します。 IBM Informix 製品は数値または通貨データを含む文字列を 出力するとき、エンド ユーザ フォーマットを使用して、データベースの列の内部 値を文字列としてフォーマットする方法を決定します。 数字および通貨のエンド ユーザ フォーマットは、次の要素を指定します。 v 小数点記号 は、数値の整数部分を小数部分から区切ります。デフォルト ロケー ルでは、ピリオド (.) は小数点記号 (3.01) です。フランス語などのロケールで は、カンマが小数点記号 (3,01) です。 v 3 桁区切り記号 を、数値の整数部分の数字のグループの間に使用できます。デフ ォルト ロケールでは、カンマが 3 桁区切り記号 (3,255) です。フランス語ロケ ールでは、スペースが 3 桁区切り記号です (3 255)。 v 正および負の数値を示す文字 v 通貨ではない 3 桁区切り記号のそれぞれの表示の間をグループ化する桁数 たとえば、数字では 100 万の後の区切り記号を常に省略すると指定すると、 1234,345 という出力が生成されます。 この表記に加えて、通貨データでは通貨記号 も使用して、通貨単位を識別します。 この記号は、通貨値の前 ($100) または後ろ (100FF) に表示できます。本書では、 通貨記号、小数点記号、3 桁区切り記号の組み合せを通貨表記 と呼びます。 日付および時刻フォーマット IBM Informix 製品は時刻データを含む文字列を読み取るときに、エンド ユーザ フ ォーマットを使用して、この文字列を日時 (DATETIME) 型の列の内部整数値に変換 する方法を決定します。 IBM Informix 製品は時刻データを含む文字列を出力する ときに、エンド ユーザ フォーマットを使用して、日時 (DATETIME) 型の列の内部 整数値を文字列としてフォーマットする方法を決定します。同様に、IBM Informix 製品は日付エンド ユーザ フォーマットを使用して日付 (DATE) 型の内部値の文字 列の読取りおよび出力を行います。 14 IBM Informix GLS: ユーザーズ ガイド 重要: エンド ユーザ フォーマットはクライアント アプリケーションがデータを表 示する方法を指定しますが、データベースに格納される日時 (DATETIME) 型 値または日付 (DATE) 型値の内部フォーマットには影響を与えません。 日時のエンド ユーザ フォーマットは、曜日と月の名前、その省略形、および一般 に使用される日付表現、時刻表現 (12 時間または 24 時間)、日時 (DATETIME) 型 値の表現を含むことができます。 エンド ユーザ フォーマットは、(日本元号の日付システムにおける) 元号名や、(ア ラビアの太陰暦など) グレゴリオ暦でない暦の名前を含むことができます。 たとえば、台湾地域では、グレゴリオ暦の年に加えて、民国年形式を使用します。 1912 年より前の日付の場合、民国年は負の値になります。民国年の 0000 は未定義 です。この値を使用しようとすると、エラーが発生します。次の表は、いくつかの 元号ベース日付を示したものです。 グレゴリオ暦の年 民国年 注釈 1993 1912 1911 1910 1900 82 01 -01 -02 -12 1993 1912 1911 1910 1900 - 1911 1911 1912 1912 1912 = = = = = 82 01 -01 -02 -12 日本元号の日付は、日本天皇の在位期間に結び付いています。次の表は、ユリウス 暦と日本元号の日付を示したものです。この表には、日本元号形式が、日本語文字 の抽象マルチバイト文字を使用した完全な形式と、ローマ字を使用した省略形 (元 号) で示されています。元号の省略形では、日本元号の英語名の最初の文字を使用 します。たとえば、H は平成を表します。 グレゴリオ暦の日付 1868/09/08 1912/07/30 1912/07/31 1926/12/25 1926/12/26 1989/01/07 1989/01/08 1995/01/01 抽象日本元号 (完全) 1 2 1 2 A A B B 01/09/08 A1A2B1B245/07/30 A1A2B1B201/07/31 A1A2B1B215/12/25 A1A2B1B201/12/26 A1A2B1B264/01/07 A1A2B1B201/01/08 A1A2B1B207/01/01 日本元号 (元号) M01/09/08 M45/07/30 T01/07/31 T15/12/25 S01/12/26 S64/01/07 H01/01/08 H07/01/01 ここで、A1A2 と B1B2 は、マルチバイトの日本語文字を表します。詳しくは、34 ページの『日時エンド ユーザ フォーマットのカスタマイズ』を参照してくださ い。 GLS ロケールの設定 データベース サーバとクライアント アプリケーションが正常に通信を行うには、 ご使用の環境に適切な GLS ロケールを設定する必要があります。 GLS ロケール名 は、IBM Informix 製品で使用したい言語、地域、およびコード セットを識別しま す。ロケール名のコンポーネントの構文については、39 ページの 『CLIENT_LOCALE』を参照してください。 第 1 章 GLS 基本機能 15 IBM Informix 製品は、ロケール名を使用して対応するロケール ファイル を検索し ます。ロケール ファイルとは、ランタイム バージョンのロケール情報です。ロケ ール名は、gls と呼ばれる (INFORMIXDIR が指定する) Informix インストール デ ィレクトリのサブディレクトリの GLS ロケール ファイルと一致する必要がありま す。 GLS ロケール ファイルについて詳しくは、 153 ページの『GLS ファイルの管 理』を参照してください。 クライアント/サーバ環境におけるロケール クライアント/サーバ環境では、クライアント アプリケーション、データベース サ ーバ、および 1 つ以上のデータベースが別のコンピュータ上にある場合がありま す。 図 1 は、Informix データベース サーバを介した ESQL/C クライアント アプ リケーションと acctng データベースとのデータベース サーバ接続例を示したもの です。 図 1. クライアント/サーバ環境の例 これらのコンピュータは、さまざまなオペレーティング システム、またはさまざま な言語サポートを使用する場合があります。データベース アプリケーションのこれ らの 3 部分がロケール情報を正常に通信できるようにするために、IBM Informix 製品は次のロケールをサポートします。 v クライアント ロケール は、クライアント アプリケーションが使用するロケール を識別します。 v データベース ロケール は、データベース内のデータのロケールを識別します。 v サーバ ロケール は、データベース サーバがサーバー特有のファイルに使用する ロケールを識別します。 図 2 は、(16 ページの図 1 の) 例の ESQL/C アプリケーションにより設定されるク ライアント ロケール、データベース ロケール、およびサーバ ロケールを示してい ます。 16 IBM Informix GLS: ユーザーズ ガイド 図 2. クライアント ロケール、データベース ロケール、およびサーバ ロケール これらのそれぞれのロケールごとに同一または互換性のある GLS ロケールを設定 すると、クライアント アプリケーションは、それぞれのコンピュータのオペレーテ ィング システムが言語特有の機能をどのように実装するかには依存しません。 次の節では、それぞれのロケールの詳細を説明します。 クライアント ロケール クライアント ロケール は、クライアント アプリケーションが読取りおよび書込み (I/O) 操作を実行するために使用する言語、地域、およびコード セットを指定しま す。クライアント アプリケーションの I/O 操作としては、キーボード入力または データベースに送信されるデータのファイルの読取り、およびデータベース サーバ がデータベースから取得したデータの画面、ファイル、プリンタへの書込みが挙げ られます。さらに、SQL API クライアントは、リテラル文字列 (エンド ユーザ フ ォーマット)、埋込み SQL (ESQL) 文、およびホスト変数についてクライアント ロ ケールを使用します。 IBM Informix 製品では、次の目的で CLIENT_LOCALE 環境変数が使用されます。 v ESQL/C のプリプロセッサはソース ファイルを処理するとき、 CLIENT_LOCALE のコード セットで作成された C ソース コードを受け入れま す。 使用する C コンパイラおよびオペレーティング システムには、ESQL/C プログ ラムに関する制限が課せられる場合があります。詳しくは、135 ページの『非 ASCII ファイル名の生成』を参照してください。 v ESQL/C クライアント アプリケーションが実行されると、クライアント ロケー ルの名前について CLIENT_LOCALE が検査されます。この環境変数は、オペレ ーティング システムのファイル名、テキスト ファイルの内容、および日付、時 刻、数値データのフォーマットに影響を与えます。 詳しくは、134 ページの『非 ASCII 文字の処理』を参照してください。 v クライアント アプリケーションとデータベース サーバが文字データのやり取り を行うとき、CLIENT_LOCALE 環境変数のコード セットが (クライアント コン 第 1 章 GLS 基本機能 17 ピュータ上の) DB_LOCALE のコード セットと異なる場合には、クライアント アプリケーションはコード セット変換を実行します。 コード セット変換により、これらの 2 つのコード セットが異なるときにデータ 破損を避けることができます。詳しくは、30 ページの『コード セット変換の実 行』を参照してください。 v クライアント アプリケーションが接続を要求するとき、CLIENT_LOCALE など の情報をデータベース サーバに送信します。 データベース サーバは、サーバ処理ロケールのクライアント アプリケーション 情報の設定方法を決定するときに CLIENT_LOCALE を使用します。詳しくは、 25 ページの『データベース接続の確立』を参照してください。 v データベース ユーティリティによりファイルが作成されるとき、ファイル名とフ ァイル内容は、CLIENT_LOCALE が指定するコード セットになります。 v クライアント アプリケーションが製品特有のメッセージ ファイルを検索すると き、クライアント ロケールと関連付けられたメッセージ ディレクトリを検査し ます。 詳しくは、34 ページの『メッセージ ファイルの探索』を参照してください。 17 ページの図 2 に示した接続の例では、クライアント ロケールが Windows コー ド ページ 1252 (de_de.1252) のドイツ語である場合、ESQL/C クライアント アプ リケーションが使用するドイツ語ロケール特有の情報には次が含まれます。 v 有効なエンド ユーザ フォーマットは、米国英語 (U.S. English) の日付の Tuesday, 02/11/1997 について、次のフォーマットをサポートします。 Tu., 11. Feb 1997 v 有効な通貨エンド ユーザ フォーマットは、米国英語 (U.S. English) の金額で $354,446.02 について、次のフォーマットをサポートします。 DM354.446,02 ヒント: クライアント ロケールに関するこの情報を提供するために、ロケール フ ァイルに次のロケール カテゴリが含まれています。 COLLATION、 CTYPE、TIME、MONETARY、および NUMERIC。詳しくは、154 ページ の『ロケール カテゴリ』を参照してください。 クライアント ロケールを決定するために、クライアント アプリケーションはクラ イアント コンピュータに設定された環境変数を使用します。クライアント ロケー ルのローカライズ順序とおよびエンド ユーザ フォーマットを取得するために、ク ライアント アプリケーションは次の優先順位を使用します。 1. 日時データのエンド ユーザ フォーマットについては、DBDATE 環境変数と DBTIME 環境変数、および通貨データのエンド ユーザ フォーマットについて は、DBMONEY 環境変数 (これらのうちのいずれかが設定されている場合) 2. 日時データのエンド ユーザ フォーマットについては、GL_DATE 環境変数と GL_DATETIME 環境変数 (これらのうちのいずれかが設定されている場合) 3. クライアント ロケールが定義する情報 (設定されている場合、 CLIENT_LOCALE) 4. デフォルト ロケール (米国英語 (U.S. English)) 18 IBM Informix GLS: ユーザーズ ガイド Dynamic Server IBM Informix Dynamic Server に基づいたクライアント アプリケーションは、前述 したリストの手順 18、3 (18 ページ)、および 4 (18 ページ) の優先順位を使用しま す。 Dynamic Server クライアント アプリケーションについて、その他の環境変数 を設定する必要はありません。 Dynamic Server の終り DBDATE と DBTIME がサポートされることにより、IBM Informix 製品の以前の バージョンに基づいた、クライアント アプリケーションの下位方向の互換性が提供 されます。新しいアプリケーションには、GL_DATE と GL_DATETIME を使用す ることをお勧めします。 データベース ロケール データベース ロケール (DB_LOCALE 環境変数を使用して設定される) は、特定の データベース内のロケールを区別するデータ型 (各国語文字 (NCHAR) 型と各国語 可変長文字 (NVARCHAR) 型) を正しく解釈するために、データベース サーバが必 要とする言語、地域、およびコード セットを指定します。 DB_LOCALE に指定し たコード セットにより、任意の文字の列で有効な文字、およびデータベース、表、 列、ビューなどのデータベース オブジェクトの名前が決定されます。詳しくは、62 ページの『データベース オブジェクトの命名』を参照してください。 データベース ロケールは、文字方向 も指定します。ほとんどの言語は左から右に 書きますが、右から左に書くものや、上から下に書くものもあります。 IBM Informix 製品は、次の目的で DB_LOCALE 環境変数を使用します。 v クライアント アプリケーションとデータベース サーバが文字データのやり取り を行うとき、 (クライアント コンピュータの) DB_LOCALE 環境変数の値が CLIENT_LOCALE の値と異なる場合には、クライアント アプリケーションはコ ード セット変換を実行します。 コード セット変換により、これらの 2 つのコード セットが異なるときにデータ 破損を避けることができます。詳しくは、30 ページの『コード セット変換の実 行』を参照してください。 v クライアント アプリケーションが接続を要求するとき、DB_LOCALE (設定され ている場合) などの情報をデータベース サーバに送信します。 データベース サーバは、サーバ処理ロケールのデータベース情報の設定方法を決 定するときに DB_LOCALE を使用します。詳しくは、25 ページの『データベー ス接続の確立』を参照してください。 v クライアント アプリケーションがデータベースをオープンしようとするとき、デ ータベース サーバは、データベースに格納されたデータベース ロケールを使用 して、クライアント アプリケーションが渡した DB_LOCALE 環境変数の値を比 較します。 ロケールを区別するデータ型の列にデータベース サーバがアクセスするとき、デ ータベース サーバは DB_LOCALE が指定するロケールを使用します。詳しく は、26 ページの『データベース ロケールの検証』を参照してください。 v データベース サーバが新しいデータベースを作成するとき、データベース サー バは、データベース ロケール (DB_LOCALE) を検査して、データベースのシス 第 1 章 GLS 基本機能 19 テム カタログへの文字情報の保管方法を決定します。この情報には、正規表現の 処理方法、文字列の比較方法、コード セットが適切に使用されることを保証する 方法などの操作が含まれます。 データベース サーバは、systables カタログ表に、データベース ロケールのコン デンス版を保管します。 データベース サーバがデータベース ロケール情報をシステム カタログに直接格納 するとき、そのロケールはデータベースに永続的に関連付けられます。この情報 は、データベースの有効期間を通して使用されます。このようにして、データベー ス サーバは、ロケールを区別するデータを正しく解釈するために必要なロケールを 常に決定できます。 Dynamic Server SET COLLATION 文で、異なるロケールのローカライズ順序照合を指定して、現行 セッション内で各国語文字 (NCHAR) 型データと各国語可変長文字 (NVARCHAR) 型データをソートできます。 Dynamic Server の終り コンデンス版のデータベース ロケールは、systables の次の 2 行に格納されま す。systables の site 列にはコンデンス ロケール名が格納されます。 v tabid 90 の行には、データベース ロケールの COLLATION カテゴリが格納され ます。照合順序は、コード セットの文字が照合される順序を決定します。データ ベース ロケールが (デフォルト ロケールの米国英語 (U.S. English) のように) 照 合のコード セット順序しか定義しない場合、データベース サーバは文字 (CHAR) 型列と可変長文字 (VARCHAR) 型列を作成して文字情報を格納します。 一方、データベース ロケールが照合のローカライズ順序を定義する場合、データ ベース サーバは各国語文字 (NCHAR) 型列と各国語可変長文字 (NVARCHAR) 型列を作成してこの文字情報を格納します。この行の表名値は GLS_COLLATE です。 v tabid 91 の行には、データベース ロケールの CTYPE カテゴリが格納されま す。ロケールの CTYPE カテゴリは、コード セットの文字の分類方法を決定しま す。データベース サーバは、大文字小文字変換といくつかの正規表現の評価に文 字分類を使用します。この行の表名 値は GLS_CTYPE です。 データベース DB_LOCALE DB_LOCALE DB_LOCALE サーバは、クライアント アプリケーションから送信される 環境変数の値を使用します。ただし、クライアント コンピュータに を設定しない場合、データベース サーバはサーバ コンピュータの の値をデータベース ロケールとして使用します。 17 ページの図 2 に示した接続では、クライアント アプリケーションが acctng デ ータベースにある各国語文字 (NCHAR) 型列のソート済み情報を要求するとき、デ ータベース サーバはデータベース ロケールを参照します。このロケールが Windows コード ページ 1252 (de_de.1252) のドイツ語である場合、データベース サーバは、ö などのアクセント付き文字を、それと同じ文字でアクセント付きでは ないものの後にソートするローカライズ順序を使用します。したがって、文字列 20 IBM Informix GLS: ユーザーズ ガイド öff は ord の後で、pre の前にソートされます。データベース ロケールを設定す る構文については、41 ページの『DB_LOCALE』を参照してください。 サーバ ロケール サーバ ロケール (SERVER_LOCALE 環境変数を使用して設定する) は、データベ ース サーバがサーバ コンピュータ (データベース サーバが実行されているコンピ ュータ) に対して読取りおよび書込み (I/O) 操作を実行するために使用する言語、 地域、およびコード セットを指定します。これらの I/O 操作には、次のファイル の読取りまたは書込みが含まれます。 v 追加の診断情報を提供するためにデータベース サーバにより生成される診断ファ イル v イベントを記録するためにデータベース サーバにより生成されるログ ファイル v SQL 文 SET EXPLAIN により生成されるファイル sqexplain.out ただし、データベース サーバは、Informix プロプラエタリ フォーマットのファイ ル (データベースとテーブル ファイル) を書き込むために、サーバー ロケールは使 用しません。サーバ ロケールを使用してデータベース サーバが書き込むファイル の詳細な説明については、 103 ページの『第 4 章 データベース サーバの機能』を 参照してください。 データベース サーバは、SERVER_LOCALE に指定されたロケールに関連付けられ たメッセージ ディレクトリ内の製品特有のメッセージ ファイルを検索します。詳 しくは、34 ページの『メッセージ ファイルの探索』を参照してください。 17 ページの図 2 に示した接続例では、Informix データベース サーバは SERVER_LOCALE に指定されたロケールを使用して、メッセージ ログ ファイル への書込み時に使用するコード セットを決定します。サーバ ロケールを設定する 構文については、58 ページの『SERVER_LOCALE』を参照してください。 ヒント: データベース サーバは、サーバ ロケールを認識する必要がある唯一の IBM Informix 製品です。サーバ コンピュータ上で実行されるデータベー ス サーバ ユーティリティは、クライアント ロケールを使用してファイル への書込みとファイルからの読取りを行います。また、(サーバ コンピュー タの) データベース ロケールを使用して、サーバ コンピュータに設定され たデータベースにアクセスします。 注: サーバ ロケールとサーバ処理ロケールは、2 つの異なるロケールです。サーバ 処理ロケールについて詳しくは、27 ページの『サーバ処理ロケールの決定』を 参照してください。 デフォルト ロケール ロケールを指定できる環境変数が設定されていない場合、IBM Informix 製品は米国 英語 (U.S. English) をデフォルト ロケール として使用します。 デフォルト ロケールは次の情報を指定します。 v 米国英語 (U.S. English) および英語コード セット v 通貨、数値、日付、および時刻データの標準米国 (U.S.) フォーマット 第 1 章 GLS 基本機能 21 データベース アプリケーションのデフォルト ロケールを使用するには、特別な手 順は不要です。ただし、カスタマイズ済みバージョンの米国英語 (U.S. English)、英 国英語、またはその言語を使用するには、ご使用の環境で適切なロケールを識別す る必要があります。 GLS ロケールの指定方法については、23 ページの『非デフォルト ロケールの設 定』を参照してください。 デフォルト コード セット デフォルト ロケールである米国英語 (U.S. English) のロケール名は次のとおりで す。ここで、en は英語を、us は米国地域を、数字はデフォルト コード セットの プラットフォーム固有の名前を示します。 デフォルト コード セット とは、デフォルト ロケールがサポートするコード セッ トです。デフォルト ロケールを使用するとき、デフォルト コード セットは、 ASCII コード セットと 8 ビット文字のいくつかのセットの両方をサポートしま す。 ASCII 値の図表については、「IBM Informix: SQL ガイド: 構文」の『関係演 算子』の部分を参照してください。次の表は、UNIX および Windows プラットフ ォームのデフォルト コード セットを示したものです。 プラットフォーム デフォルト コード セット UNIX Windows ISO8859-1 Microsoft 1252 ロケール名には、コード セット名か、またはコンデンス形式のコード セット名の いずれかとしてコード セットを指定できます。たとえば、次のロケール名はどちら も、ISO8859-1 コード セットの米国英語 (U.S. English) ロケールを識別します。 UNIX のみ v ロケール名 en_us.8859-1 はコード セット名を使用して ISO8859-1 コード セ ットを識別します。 UNIX のみ の終り Windows のみ v ロケール名 en_us.0333 はコンデンス形式のコード セット名を使用して ISO8859-1 コード セットを識別します。 Windows のみ の終り コンデンス形式のコード セット名の詳細については、161 ページの『コード セッ ト変換ファイル名』を参照してください。 日付および時刻のデフォルト エンド ユーザ フォーマット デフォルト ロケールでは、IBM Informix 製品は、日付および時刻の値に次のエン ド ユーザ フォーマットを使用します。 v 日付 (DATE) 型値の場合: %m/%d/%iy 22 IBM Informix GLS: ユーザーズ ガイド v 日時 (DATETIME) 型値の場合: %iY-%m-%d %H:%M:%S フォーマット ディレクティブに関する情報は、48 ページの『GL_DATE』と 53 ペ ージの『GL_DATETIME』を参照してください。日時エンド ユーザ フォーマット の概要については、14 ページの『日付および時刻フォーマット』を参照してくださ い。これらのエンド ユーザ フォーマットのカスタマイズ方法については、34 ペー ジの『日時エンド ユーザ フォーマットのカスタマイズ』を参照してください。 数値および通貨値のデフォルト エンド ユーザ フォーマット デフォルト ロケールを使用するとき、IBM Informix 製品は、数値および通貨の値 に次のエンド ユーザ フォーマットを使用します。 v 3 桁区切り記号はカンマ (,) です。 v 小数点記号はピリオド (.) です。 v それぞれの 3 桁区切り記号の間に 3 つの数字が表示されます。 v 正と負の符号は、それぞれプラス (+) とマイナス (-) です。 通貨の値の場合、IBM Informix 製品は、通貨記号であるドル ($) 記号も通貨の値の 前に使用します。数値および通貨のエンド ユーザ フォーマットの概要について は、14 ページの『数値および通貨フォーマット』を参照してください。これらのエ ンド ユーザ フォーマットのカスタマイズ方法については、36 ページの『通貨値の カスタマイズ』を参照してください。 非デフォルト ロケールの設定 デフォルトでは、IBM Informix 製品は米国英語 (U.S. English) ロケールを使用しま すが、IBM Informix 製品は多数の他のロケールをサポートします。 非デフォルト ロケールを使用するには、次の環境変数を設定する必要があります。 v 適切なクライアント ロケールを指定するために、CLIENT_LOCALE 環境変数を 設定します。 CLIENT_LOCALE を設定しない場合、クライアント ロケールは、デフォルト ロケールの米国英語 (U.S. English) です。 v クライアント コンピュータがデータベースに接続するときに使用する、クライア ント アプリケーションのデータベース ロケールを指定するために、それぞれの クライアント コンピュータに DB_LOCALE を設定します。 DB_LOCALE をクライアント システムに設定しない場合、クライアント アプリ ケーションは DB_LOCALE をクライアント ロケールに設定します。このデフォ ルト値を使用した場合、クライアント アプリケーションでコード セット変換を 実行する必要がありません。 サーバ コンピュータに DB_LOCALE を設定して、(クライアントが独自の DB_LOCALE を指定していない場合に) データベース サーバが、データベース の作成などの操作を実行できるようにしたい場合もあります。 v 適切なサーバ ロケールを指定するために、SERVER_LOCALE 環境変数を設定 します。 SERVER_LOCALE を設定しない場合、サーバ ロケールはデフォルト ロケール の米国英語 (U.S. English) です。 第 1 章 GLS 基本機能 23 非デフォルト ロケールのデータベースにアクセスするには、クライアント システ ムの CLIENT_LOCALE および DB_LOCALE 設定値がこの非デフォルト ロケー ルをサポートする必要があります。 30 ページの『コード セット変換の実行』で説 明したように、両方のロケールが同一であるか、またはそれぞれのコード セットが お互いに変換可能である必要があります。 たとえば、日本語の SJIS ロケールのデータベースにアクセスするには、クライア ント システムで DB_LOCALE と CLIENT_LOCALE の両方を ja_jp.sjis に設定 します。 (DB_LOCALE を設定して、 CLIENT_LOCALE は設定しない場合、クラ イアント アプリケーションによりエラーが戻されます。その理由は、クライアント アプリケーションが、SJIS データベースのコード セットと、クライアント システ ムのデフォルト ロケールのコード セットとの間でコード セット変換をセット ア ップできないためです。 クライアント アプリケーションが接続を要求するとき、データベース サーバは、 クライアント、データベース、およびサーバ ロケールにある情報を使用してサーバ 処理ロケールを作成します。詳しくは、25 ページの『データベース接続の確立』を 参照してください。 IBM Informix 製品での GLS ロケールの使用 IBM Informix 製品は、次のタスクで GLS ロケールを使用します。 v クライアント アプリケーションが接続を要求するとき、データベース サーバ は、クライアント ロケールとデータベース ロケールを使用してこれらのロケー ルに互換性があるかどうかを判別します。 v クライアント アプリケーションが初めて実行を開始するとき、クライアント ロ ケールとデータベース ロケールを比較して、コード セット変換を実行する必要 があるかどうかを判別します。 v 製品特有のメッセージを表示するすべての IBM Informix 製品は、これらのメッ セージを検索するためにクライアント ロケールに特有のディレクトリを探索しま す。 非 ASCII 文字のサポート IBM Informix 製品は、その GLS ロケールからコード セットを取得します。ロケ ールは、シングルバイトとマルチバイトのコード セットの両方で使用可能です。サ ポートされたすべてのコード セットは、ASCII 文字を定義します。多くのコード セットは、追加の非 ASCII 文字 (8 ビットまたはマルチバイト文字) もサポートし ます。コード セットおよび非 ASCII 文字について詳しくは、8 ページの『文字デ ータのコード セット』を参照してください。 次のタイプの GLS ロケールは、そのコード セットに非 ASCII 文字が含まれるロ ケールの例です。 v デフォルト ロケールはデフォルト コード セットをサポートします。デフォルト コード セットには、é、ñ、および ö など、非英語文字の 8 ビット文字が含まれ ます。 デフォルト コード セットの名前は、IBM Informix 商品がインストールされてい るプラットフォームにより異なります。デフォルト コード セットについて詳し くは、22 ページの『デフォルト コード セット』を参照してください。 24 IBM Informix GLS: ユーザーズ ガイド v 多くの非デフォルト ロケールで、デフォルト コード セットがサポートされてい ます。 UNIX のみ UNIX デフォルト コード セット ISO8859-1 をサポートする非デフォルト ロケ ールには、英国英語 (en_gb.8859-1)、フランス語 (fr_fr.8859-1)、スペイン語 (es_es.8859-1)、およびドイツ語 (de_de.8859-1) が含まれます。 UNIX のみ の終り v 日本語の SJIS (ja_jp.sjis)、韓国語 (ko_kr.ksc)、および中国語 (zh_cn.gb) な ど、その他の非デフォルト ロケールには、マルチバイト コード セットが含まれ ます。 (統一中国語コード セットは、GB18030-2000 です。) マルチバイト文字が含まれている非 ASCII 文字を使用できるコンテキストについて は、61 ページの『第 3 章 SQL 機能』、103 ページの『第 4 章 データベース サ ーバの機能』、および 123 ページの『第 5 章 一般的な SQL API 機能』を参照し てください。 ただし、非 ASCII 文字をサポートする IBM Informix 製品の場合、同一の非 ASCII 文字を持つコード セットをサポートするロケールを使用する必要があります。 データベース接続の確立 クライアント アプリケーションがデータベースへの接続を要求するとき、データベ ース サーバは GLS ロケールを使用して次の手順を実行します。 1. クライアントから渡されたクライアント ロケール情報を検証します。 2. クライアント アプリケーションと接続を要求したデータベースとの間の接続を 確立できることを検証します。 3. サーバ処理ロケールを決定します。データベース サーバはサーバ処理ロケール を使用して、接続に必要なロケール特有の情報を処理します。 クライアント ロケールの送信 クライアント アプリケーションは接続を要求するとき、クライアント ロケールか らデータベース サーバに次の環境変数を送信します。 v ロケール情報 – CLIENT_LOCALE CLIENT_LOCALE が設定されていない場合、クライアントはこれをデフォル ト ロケールに設定します。 – DB_LOCALE DB_LOCALE が設定されていない場合、クライアントは DB_LOCALE 値を データベースに送信しません。 v ユーザによりカスタマイズされたエンド ユーザ フォーマット – 日時エンド ユーザ フォーマット: GL_DATE と GL_DATETIME – 通貨エンド ユーザ フォーマット: DBMONEY 第 1 章 GLS 基本機能 25 これらの環境変数のいずれも設定しない場合、クライアント アプリケーションは これらの環境変数をデータベース サーバに送信せず、データベース サーバは CLIENT_LOCALE で定義されるエンド ユーザ フォーマットを使用します。 データベース サーバはこれらの設定値を使用して次の情報を抽出します。 v 数値と通貨値のフォーマット方法 v 日付と時刻のフォーマット方法 v クライアントが予期するデータベース ロケール データベース サーバはこの情報を使用して、データベース ロケールを検証し、サ ーバ処理ロケールを確立します。 データベース ロケールの検証 既存のデータベースをオープンするには、クライアント アプリケーションはそのデ ータベースのデータベース ロケールを正しく識別する必要があります。データベー ス ロケールを検査するために、データベース サーバは次の 2 つのロケールを比較 します。 v クライアント アプリケーションから送信される、DB_LOCALE により指定され たロケール v クライアント アプリケーションが要求するデータベースのシステム カタログに 格納されているデータベース ロケール 詳しくは、19 ページの『データベース ロケール』を参照してください。 2 つのデータベース ロケールは、その言語、地域、コード セット、およびロケー ル修飾子が同一である場合に一致します。これらのデータベース ロケールが一致し ない場合、データベース サーバは次の操作を実行します。 v SQL 通信域 (SQLCA 構造体) の SQLWARN 配列の 8 番目の文字 (CHAR) 型フ ィールドに、警告フラグとして W を設定します。 W の値は、ASCII 32 (ブラン ク) と ASCII 87 (W) です。 v 要求されたデータベースのシステム カタログ内に格納されているデータベース ロケールを、データベース ロケールとして使用します。 警告: クライアント アプリケーションが接続を要求した後に、SQLWARN 警告フ ラグがあるかどうかを検査してください。 2 つのデータベース ロケールが 一致しない場合、データベースから抽出されたデータがクライアント アプリ ケーションにより正しく解釈されなかったり、または、クライアントから抽 出されたデータがデータベース サーバにより正しく解釈されない場合があり ます。そのような接続を続行した場合、交換されるデータのフォーマットを 理解する責任をあなたが負うことになります。 接続警告の検査 SQLWARN 配列の 8 番目の文字 (CHAR) 型フィールドを検査するために、 ESQL/C クライアント アプリケーションは sqlca.sqlwarn.sqlwarn7 フィールドを 検査できます。 sqlwarn7 フィールドの値が W である場合、データベース サーバーはクライアン トが指定したデータベース ロケールを無視し、その代わりにデータベース内のロケ ールをデータベース ロケールとして使用します。 26 IBM Informix GLS: ユーザーズ ガイド ESQL プログラム内の例外の処理方法の詳細については、「IBM Informix: ESQL/C Programmer’s Manual」を参照してください。 重要: SQLWARN 配列内の配列要素は、IBM Informix ESQL/C では 0 から順番に 番号が付けられますが、他の言語では 1 から番号が付けられます。 IBM Informix 4GL および IBM Informix Dynamic 4GL など、配列で 1 から 始まる計数方法を使用する IBM Informix GLS ツールの場合、IBM Informix ESQL/C が sqlca.sqlwarn.sqlwarn7 を呼び出すという警告文字は、 SQLCA.SQLAWARN[8] と呼ばれます。 サーバ処理ロケールの決定 データベース サーバは、サーバ処理ロケール を使用して、独自の内部セッション および任意の接続に関するロケール情報を取得します。データベース サーバが実行 を開始するとき、データベース サーバは、サーバ処理ロケールをデフォルト ロケ ールに初期化します。クライアント アプリケーションが接続を要求するとき、デー タベース サーバは、クライアント ロケールとデータベース ロケールを組み込むた めにサーバ処理ロケールを再度決定します。データベース サーバはサーバ処理ロケ ールを使用して、クライアント システムとデータベースとの間でデータを転送する ときに必要なロケール情報を取得します。 Informix データベース サーバがデータベース ロケールを検査すると、Informix デ ータベース サーバはクライアント ロケールとデータベース ロケールからの環境変 数の優先順位を使用してサーバ処理ロケールを設定します。 データベース サーバは、サーバ処理ロケールから次の情報を取得します。 v データベースのロケール情報 このデータベース情報には、ロケールを区別するデータ型 (各国語文字 (NCHAR) 型と各国語可変長文字 (NVARCHAR) 型) の列にあるデータのローカライズ順序 とコード セットが含まれます。データベース サーバは、検査したデータベース ロケールの名前からこの情報を取得します。 v クライアント アプリケーション データのロケール情報 このクライアント アプリケーション情報により、日付、時刻、数値、および通貨 データのエンド ユーザ フォーマットが提供されます。データベース サーバは、 クライアントが接続を要求するときにクライアント アプリケーションからこの情 報を取得します。 図 3 は、クライアント ロケール、データベース ロケール、サーバ ロケール、およ びサーバ処理ロケールの関係を示しています。 第 1 章 GLS 基本機能 27 図 3. サーバ処理ロケール ヒント: データベース サーバは、独自のオペレーティング システム ファイルに対 する読取りおよび書込み操作に、SERVER_LOCAL 環境変数によって指定 されたサーバ ロケールを使用します。オペレーティング システム ファイ ルの詳細については、103 ページの『Informix データベース サーバによる GLS サポート』を参照してください。 データベースのロケール情報: データベース サーバは、ロケールを区別するデー タ型 (各国語文字 (NCHAR) と各国語可変長文字 (NVARCHAR) 型) の列にあるデ ータの解釈方法を認識する必要があります。このロケール特有のデータを正しく処 理するには、データベース サーバが、データの照合およびデータのコード セット のローカライズ順序を認識しなければなりません。さらに、データベース サーバは データベース ロケールのコード セットを、サーバ処理ロケールのコード セットと して使用します。 データベース サーバは、サーバ処理ロケールとサーバ ロケールとの間のコード セ ット変換を実行する必要がある場合があります。詳しくは、30 ページの『コード セット変換の実行』を参照してください。 データベース サーバは、次の優先順位を使用してこのデータベース情報を決定しま す。 1. サーバ処理ロケールのデータベース情報を判別するためにデータベース サーバ が使用するロケールは、次のように、クライアント アプリケーションが接続を 要求するデータベースの状態によって異なります。 a. 既存の データベースへの接続の場合、データベース サーバは、データベー ス ロケールの検査時に取得したデータベース ロケールからのデータベース 情報を使用します。クライアント アプリケーションが DB_LOCALE を送信 しない場合、データベース サーバは、サーバ コンピュータに設定された DB_LOCALE を使用します。 28 IBM Informix GLS: ユーザーズ ガイド b. 新しい データベースの場合、データベース サーバは、クライアント アプリ ケーションから送信された DB_LOCALE を使用します。 2. サーバ コンピュータの DB_LOCALE 環境変数が指示するロケール 3. デフォルト ロケール (米国英語 (U.S. English)) Dynamic Server Dynamic Server は、前述したリストの手順 18、29、および 3 の優先順位を使用し て、サーバ処理ロケールのデータベース情報を取得します。他の環境変数を設定す る必要はありません。 Dynamic Server の終り ヒント: 優先順位ルールは、サーバ処理ロケールの COLLATION カテゴリおよび CTYPE カテゴリの両方をデータベース サーバが決定する方法に適用され ます。これらのロケール カテゴリについて詳しくは、154 ページの『ロケ ール カテゴリ』を参照してください。 データベースによるこれらの環境変数の取得方法について詳しくは、25 ページの 『クライアント ロケールの送信』を参照してください。 クライアント アプリケーションがデータベースのオープンを別に要求した場合、デ ータベース サーバは、次のようにサーバ処理ロケールのデータベース情報を再確立 する必要があります。 1. オープンするデータベースのデータベース ロケールを、クライアント アプリケ ーションの DB_LOCALE 環境変数の値と比較してそのデータベース ロケール を再検査します。 2. (前の手順で) 新たに検査されたデータベース ロケールを使用してサーバ処理ロ ケールを再設定します。 たとえば、クライアント アプリケーションの DB_LOCALE が en_us.8859-1 (ISO8859-1 コード セットの米国英語 (U.S. English)) に設定されているとします。 その場合、クライアント アプリケーションは米国英語 (U.S. English) ロケール (en_us.8859-1) のデータベースをオープンし、データベース サーバが、データベ ース情報を定義するロケールとして en_us.8859-1 のサーバ処理ロケールを設定し ます。 次に、クライアント アプリケーションが米国英語 (U.S. English) のデータベースを クローズし、フランス語ロケール (fr_fr.8859-1) のデータベースを別にオープンす る場合、データベース サーバはサーバ処理ロケールを再設定する必要があります。 データベース サーバは、SQLWARN 配列の 8 番目の文字 (CHAR) 型フィールド を、2 つのロケールが異なることを示す W に設定します。ただし、これらのロケー ルの両方が ISO8859-1 コード セットをサポートするため、クライアント アプリケ ーションがこの接続を使用することを選択する場合があります。クライアント アプ リケーションがフランス語ロケールのデータベースではなく、日本語の SJIS ロケ ール (ja_jp.sjis) のデータベースをオープンする場合、ロケールの違いが大きすぎ るため、クライアント アプリケーションはおそらく接続を継続しません。 クライアント アプリケーションのロケール情報: クライアント アプリケーション が送信する通貨、日付、または時刻データにエンド ユーザ フォーマットが表示さ 第 1 章 GLS 基本機能 29 れるとき、データベース サーバはエンド ユーザ フォーマットの解釈方法を認識す る必要があります。また、データベース サーバは、データベースからのデータをク ライアント アプリケーションに送信する前に、このデータを適切なエンド ユーザ フォーマットに変換する必要もあります。エンド ユーザ フォーマットについて詳 しくは、12 ページの『エンド ユーザ フォーマット』を参照してください。 データベース サーバは、次の優先順位を使用してこのクライアント アプリケーシ ョン情報を決定します。 1. 日時エンド ユーザ フォーマットについては、DBDATE 環境変数と DBTIME 環境変数、および通貨エンド ユーザ フォーマットについては DBMONEY 環境 変数 (これらのうちのいずれかがクライアントに設定されている場合) DBDATE と DBTIME がサポートされることにより、前のバージョンの IBM Informix 製品に基づいた、クライアント アプリケーションの下位方向の互 換性が提供されます。新しいアプリケーションには、GL_DATE と GL_DATETIME を使用することをお勧めします。 2. 日時エンド ユーザ フォーマットについては GL_DATE 環境変数と GL_DATETIME 環境変数 (これらのうちのいずれかが設定されている場合) 3. クライアント アプリケーションからの CLIENT_LOCALE 環境変数により指示 されるロケール ヒント: 優先順位ルールは、サーバ処理ロケールの NUMERIC、MONETARY、 TIME、および MESSAGES カテゴリをデータベース サーバが決定する方 法に適用されます。これらのロケール カテゴリについて詳しくは、154 ペ ージの『ロケール カテゴリ』を参照してください。 クライアント アプリケーションは、DBDATE、DBMONEY、DBTIME、 GL_DATE、および GL_DATETIME 環境変数 (設定されている場合) を、データベ ース サーバに渡します。また、CLIENT_LOCALE および DB_LOCALE 環境変数 も渡します。詳しくは、25 ページの『クライアント ロケールの送信』を参照して ください。 コード セット変換の実行 クライアント/サーバ環境では、クライアント コンピュータまたはサーバ コンピュ ータが、異なるコード セットを使用して同一の文字を表す場合、一方のコード セ ットから他方のコード セットへ文字データを変換する必要がある場合があります。 あるコード セット (ソース コード セット) から別のコード セット (ターゲット コード セット) への文字データの変換は、コード セット変換 と呼ばれます。コー ド セット変換を行わないと、(2 つのコンピュータが異なるコード セットを使用す るときに) 一方のコンピュータは、他方のコンピュータからの文字データを正常に 処理または表示できません。 IBM Informix 製品は、GLS ロケールを使用してコード セット変換を実行します。 IBM Informix クライアント アプリケーションとデータベース サーバの両方が、コ ード セット変換を実行する場合があります。詳しくは、105 ページの『データベー ス サーバ コード セット変換』および 123 ページの『クライアント アプリケーシ ョンのコード セット変換』を参照してください。 30 IBM Informix GLS: ユーザーズ ガイド GLS ロケールの一部としてコード セットを指定します。実行時に、IBM Informix 製品は使用するコード セットを次のルールをに従って決定します。 v クライアント アプリケーションはクライアント コード セット (CLIENT_LOCALE 環境変数によって指定されるもの) を使用して、クライアン ト コンピュータ上のすべてのファイルの書込み、およびすべてのクライアント I/O デバイスとのやり取りを行います。 v データベース サーバはデータベース コード セット (DB_LOCALE 環境変数に よって指定されるもの) を使用して、データベースとの間でデータの転送を行い ます。 v データベース サーバはサーバ コード セット (SERVER_LOCALE 環境変数によ って指定されるもの) を使用して、(デバッグや警告ファイルなどの) ファイルを 書き込みます。 コード セット変換は次の機能を提供しません。 v コード セット変換は意味変換ではありません。 異なる言語の単語間の変換は行いません。たとえば、英語の単語の yes をフラン ス語の単語の oui に変換しません。コード セット変換が保証するのは、そのエ ンコード方法に関係なく、文字が処理または書き込まれたときに、それぞれの文 字の意味が保存されるということのみです。 v コード セット変換では、文字がソース コード セットにしか存在しない場合、タ ーゲット コード セットではその文字は作成されません。 たとえば、文字 â が、コード セットにその文字が含まれていないターゲット コ ンピュータに渡された場合、ターゲット コンピュータはその文字を正確に処理ま たは出力できません。 ソースのコード セットのそれぞれの文字ごとに、対応する文字がターゲット コー ド セットに存在する必要があります。しかし、ターゲット コード セットにない文 字がソース コード セットに含まれている場合、変換で、ミスマッチする文字をタ ーゲット コード セットにマップする方法を定義する必要があります。 (ソース コ ード セットとターゲット コード セットの文字間のマッピングが行われないこと を、データ消失 エラーと呼ぶ場合があります。) ソース コード セット内のすべて の文字がターゲット コード セットに存在する場合、ミスマッチ処理は適用されま せん。 コード セット変換では、次の 4 つの方法のいずれかを使用して、ミスマッチする 文字を処理します。 v ラウンド トリップ変換 この方法では、ミスマッチするそれぞれの文字をターゲット コード セットの一 意の文字にマップします。そのため、リターン マッピングにより、元の文字にマ ップされます。この方法では、両方向の変換結果において情報が消失しないこと が保証されます。ただし、1 方向のみで変換されたデータが、ターゲット コンピ ュータ上で正しく処理または出力されない場合があります。 v 置換変換 この方法では、ミスマッチするすべての文字をターゲット コード セット内の 1 文字にマップします。ターゲット コード セットはミスマッチする文字を強調表 示します。この方法では、1 方向の変換で、ミスマッチする文字が明確に示され 第 1 章 GLS 基本機能 31 ることが保証されます。しかし、両方向の変換では、ミスマッチする文字が存在 する場合、情報が消失する結果となります。 v グラフィック置換変換 この方法では、ミスマッチするそれぞれの文字を、ソースの文字に類似した、タ ーゲット コード セット内の文字にマップします。 この方法には、1 文字の合字から等価の 2 文字へのマッピング、またその逆も含 まれ、ミスマッチするデータがターゲット コンピュータでより正確に出力されま すが、多くの場合、ターゲット コンピュータ上でのデータ処理で混乱が生じま す。 v 前述の 2 つまたは 3 つの変換メソッドの混用 ヒント: それぞれのコード セット変換ソース ファイル (.cv) により、関連づけら れた変換がミスマッチする文字を処理する方法が指示されます。コード セ ット変換ファイルの詳細については、 153 ページの『GLS ファイルの管 理』を参照してください。 コード セット変換の実行時期 アプリケーションがコード セット変換を使用する必要があるのは、 2 つのコード セット (クライアントとサーバ処理ロケール、またはサーバ処理ロケールとサーバ) が異なる場合のみです。次のような状態が、コード セットが異なる原因となる可能 性があります。 v さまざまなオペレーティング システムにより、同一の文字が異なる方法でエンコ ードされる場合があります。 たとえば、Windows コード ページ 1252 の文字 â (a- 曲折アクセント記号) の コードは、16 進数 0xE2 です。 IBM コード化文字セット ID (CCSID) 437 (共 通 IBM UNIX コード セット) では、このコードは 16 進数 0x83 です。クライ アントで â のコードが変更されずに IBM UNIX コンピュータに送信された場 合、ギリシャ語の文字 g (ガンマ) として出力されます。この事態は、g のコード が、IBM UNIX コンピュータ上では 16 進数の 0xE2 であるために発生します。 ヒント: IBM Informix 製品は、IBM CCSID コード セットの数字、すなわち、コー ド化グラフィック文字表現を一意に識別する、 16 ビット数のシステムを サポートします。詳しくは、 153 ページの『GLS ファイルの管理』を参照 してください。 v 1 つの言語が、複数のコード セットを持つことがあります。それぞれのコード セットは、その言語のサブセットを表します。 たとえば、コード セット ccdc と big5 は両方とも、中国語のサブセットの内 部表記です。ただし、これらの 2 つのサブセットには、異なる数の中国語文字が 含まれます。 重要: GLS は統一中国語 GB18030-2000 コード セットを完全にサポートします が、このコードには、Unicode 基本多言語面 (BMP) と拡張面のすべての文字 が含まれています。 コンピュータ A からコンピュータ B へのデータ転送でコード セット変換が必要 な場合、コンピュータ B からコンピュータ A へのデータ転送でもコード セット 変換が必要になります。クライアント/サーバ環境では、次の状況でコード セット変 換が必要になる可能性があります。 32 IBM Informix GLS: ユーザーズ ガイド v クライアント ロケールとデータベース ロケールが、異なるコード セットを指定 している場合、コード セット変換処理を使用してサーバ コンピュータがロード されないように、クライアント アプリケーションはコード セット変換を実行し ます。詳しくは、123 ページの『クライアント アプリケーションのコード セッ ト変換』を参照してください。 v サーバ ロケールとサーバ処理ロケールが異なるコード セットを指定している場 合、データベース サーバは、ログ ファイルなどのオペレーティング システム ファイルに対する書込みおよび読取り時にコード セット変換を実行します。詳し くは、105 ページの『データベース サーバ コード セット変換』を参照してくだ さい。 図 4 では、黒色のピリオドは、クライアント/サーバ環境でコード セット変換が発 生する可能性がある 2 つのポイントを示します。 図 4. GLS コード セット変換のポイント 図 4 に示す接続例では、クライアント コード セットとデータベース コード セッ トが変換可能である場合、ESQL/C クライアント アプリケーションは、データベー ス サーバへ送信するデータとデータベース サーバから受信するデータに対して、 コード セット変換を実行します。サーバ ロケールのコード セットとサーバ処理ロ ケールのコード セットが変換可能である場合、 Informix データベース サーバは、 メッセージ ログ ファイルへの書込みを行うときにもコード セット変換を実行しま す。 UNIX のみ UNIX 上の IBM Informix ゲートウェイ 製品は、GL_PATH 環境変数を使用して GLS コード セット変換表のデフォルトの位置を上書きします。詳しくは、バージ ョン 7.2 またはそれ以降の IBM Informix Enterprise Gateway のマニュアルを参照 第 1 章 GLS 基本機能 33 してください。 UNIX のみ の終り メッセージ ファイルの探索 IBM Informix 製品は、GLS ロケールを使用して製品特有のメッセージ ファイルを 探します。デフォルトでは、IBM Informix 製品は、製品特有のメッセージ ファイ ルのクライアント ロケールに関連付けられたサブディレクトリを自動的に検索しま す。次の表は、それぞれのプラットフォームごとにサブディレクトリをリストした ものです。 プラットフォーム ディレクトリ UNIX Windows $INFORMIXDIR/msg/lg_tr/code_set %INFORMIXDIR%¥msg¥lg_tr¥code_set このパスで、lg と tr はそれぞれ言語と地域で、クライアント ロケールの名前に由 来しています。 code_set は、コンデンス形式のコード セット名です。コード セ ットのコンデンスについて詳しくは、158 ページの『ロケール ファイル サブディ レクトリ』を参照してください。 IBM Informix 製品は、環境変数の優先順位を使用して製品特有のメッセージ ファ イルを探します。 DBLANG 環境変数を使用すると、IBM Informix 製品が使用する メッセージ ファイルの位置についてクライアント ロケールを上書きできます。 DBLANG を使用して、ご使用の環境がサポートするそれぞれのロケールごとに、メ ッセージ ファイルが存在するディレクトリを指定することもできます。 エンド ユーザ フォーマットのカスタマイズ 環境変数を設定してクライアント ロケール内の次のエンド ユーザ フォーマットを 上書きできます。 v 日時 (日付 (DATE) 型、日時 (DATETIME) 型) 値のエンド ユーザ フォーマッ ト v 通貨 (金額 (MONEY) 型) 値のエンド ユーザ フォーマット 本節では、これらのエンド ユーザ フォーマットのカスタマイズ方法を説明しま す。エンド ユーザ フォーマットの概要については、12 ページの『エンド ユーザ フォーマット』を参照してください。 日時エンド ユーザ フォーマットのカスタマイズ GLS ロケールは日時のエンド ユーザ フォーマットを定義しますが、これは、通常 は変更する必要はありません。しかし、次の環境変数を使用して、(たとえば、 10/27/97 という日付を 10-27-97 にというように) 日付 (DATE) 型値および日時 (DATETIME) 型値のエンド ユーザ フォーマットをカスタマイズできます。 34 IBM Informix GLS: ユーザーズ ガイド 環境変数 説明 GL_DATE 日付エンド ユーザ フォーマットの各国対応フォーマットについ て、拡張フォーマット文字列をサポートします。 時刻エンド ユーザ フォーマットの各国対応フォーマットについ て、拡張フォーマット文字列をサポートします。 日付エンド ユーザ フォーマットを指定します。(下位方向の互換 性はサポートされます。) 埋込み言語 (ESQL) ライブラリ関数の時刻エンド ユーザ フォ ーマットを指定します。(下位方向の互換性はサポートされま す。) GL_DATETIME DBDATE DBTIME 日付または時刻エンド ユーザ フォーマット文字列は、内部の日付 (DATE) 型値ま たは日時 (DATETIME) 型値をリテラル文字列として操作するフォーマットを指定し ます。 ヒント: これらの環境変数を設定しても、データベース内の日付 (DATE) 型値と日 時 (DATETIME) 型値の内部フォーマットには影響しません。 GL_DATE 環境変数と GL_DATETIME 環境変数は、エンド ユーザ フォーマット を指定できるようにするフォーマット ディレクティブをサポートします。フォーマ ット ディレクティブの形式は、%x (x は 1 つ以上の変換文字) です。 元号ベースの日時フォーマット GL_DATE 環境変数と GL_DATETIME 環境変数は、元号ベースの (アジア) フォ ーマットなど、代替日付および代替時刻をサポートします。これらの代替フォーマ ットでは、台湾民国年や日本元号などの日付をサポートします。 ヒント: DBDATE と DBTIME も、いくつかの元号ベース日付をサポートできま す。 日付 (DATE) 型値と日時 (DATETIME) 型値に元号ベースのフォーマットを指定す るには、次のように E 変換修飾子を使用します。 v GL_DATE または GL_DATETIME のいずれかの場合、E はいくつかのフォーマ ット ディレクティブで使用できます。 元号の有効なフォーマット変換のリストについては、55 ページの『代替時刻フォ ーマット』を参照してください。 v DBDATE の場合、E はフォーマット仕様し使用できます。 日時の優先順位 IBM Informix 製品は次の優先順位を使用して、内部の日付 (DATE) 型値のエンド ユーザ フォーマットを決定します。 1. DBDATE 2. GL_DATE 3. クライアント ロケールに定義された情報 (CLIENT_LOCALE が設定されている 場合) 4. デフォルトの日付フォーマットは %m/%d/%iy です (DBDATE と GL_DATE が 設定されておらず、ロケールも指定されていない場合) 第 1 章 GLS 基本機能 35 IBM Informix 製品は次の優先順位を使用して、内部の日時 (DATETIME) 型値のエ ンド ユーザ フォーマットを決定します。 1. DBDATE および DBTIME 2. GL_DATETIME 3. クライアント ロケールが定義する情報 (設定されている場合、 CLIENT_LOCALE) 4. デフォルトの日時 (DATETIME) 型フォーマットは %iY-%m-%d %H:%M:%S です (CLIENT_LOCALE、DBTIME、および GL_DATETIME が設定されていない場 合) これらのフォーマット ディレクティブについて詳しくは、 48 ページの 『GL_DATE』と 53 ページの『GL_DATETIME』を参照してください。 通貨値のカスタマイズ GLS ロケールにはエンド ユーザ フォーマットが含まれますが、これは、通常は変 更する必要はありません。ただし、DBMONEY 環境変数を設定して、通貨表記の表 示方法をカスタマイズすることができます。 DBMONEY 環境変数の詳細について は、「IBM Informix: SQL ガイド: 参照」を参照してください。 通貨エンド ユーザ フォーマット文字列は、内部 10 進数 (DECIMAL) 型値、実数 (FLOAT) 型値、および金額 (MONEY) 型値を通貨リテラル文字列として操作するフ ォーマットを指定します。 IBM Informix 製品は次の優先順位を使用して、金額 (MONEY) 型値のエンド ユーザ フォーマットを決定します。 1. DBMONEY 2. クライアント ロケールにより定義される情報 CLIENT_LOCALE はクライアント ロケールを識別します。これを設定しない場 合、クライアント ロケールはデフォルト ロケールになります。 3. デフォルトの通貨表記 = $,. DBMONEY が設定されず、かつロケールが指定されていない場合、通貨記号は ドル記号に、3 桁区切り記号はカンマに、小数点記号はピリオドになります。 36 IBM Informix GLS: ユーザーズ ガイド 第 2 章 GLS 環境変数 本章の概要 . . . . 環境変数の設定と検索 . GLS 関連の環境変数 . CC8BITLEVEL . . CLIENT_LOCALE . DBDATE . . . . DBLANG . . . . DB_LOCALE . . . DBMONEY . . . DBNLS (IDS のみ) . DBTIME (E/C のみ) ESQLMF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 37 38 38 39 40 40 41 43 43 44 45 GLS8BITFSYS . . . . . . . . . 非 ASCII ファイル名に関する制約事項 GL_DATE . . . . . . . . . . . 年のフォーマット ディレクティブ. . 代替日付フォーマット . . . . . . オプションの日付フォーマット修飾子 GL_DATETIME . . . . . . . . . 代替時刻フォーマット . . . . . . オプションの時刻フォーマット修飾子 作成日時の設定値 . . . . . . . SERVER_LOCALE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 46 48 50 50 51 53 55 55 58 58 本章の概要 IBM Informix 製品は、GLS 関連の環境変数からの情報と、データベースに保管さ れているデータからの情報を使用してクライアント ロケール、データベース ロケ ール、およびサーバ ロケールを設定します。本章では、GLS 関連の環境変数につ いて説明します。環境変数について詳しくは、「IBM Informix: SQL ガイド: 参照」 を参照してください。 環境変数の設定と検索 GLS 機能によって、弁別発音記号、照合順序、およびデータベースの作成時に選択 した言語の通貨、日付、数字の規則を使用できます。 ONCONFIG 構成パラメータ は GLS には存在しませんが、適切な環境変数を設定する必要があります。 ESQL/C IBM Informix ESQL/C を使用すると、C の putenv( ) 関数を使用して環境変数の 修正、作成、および削除を行うことができ、C の getenv( ) 関数を使用してオペレ ーティング システム環境から環境変数の値を検索できます。詳しくは、 「IBM Informix: ESQL/C Programmer’s Manual」を参照してください。 ESQL/C の終り UNIX のみ UNIX プラットフォームでは、適切なシェル コマンド (C シェルの場合、setenv など) を使用して環境変数を設定します。詳しくは、UNIX のマニュアルを参照し てください。 UNIX のみ の終り © Copyright IBM Corp. 1996, 2003 37 Windows のみ Windows では、InetLogin 構造体に環境変数を設定するか、Setnet32 ユーティリ ティを使用してレジストリに環境変数を設定します。 InetLogin ついて詳しくは、 ご使用の SQL API の Microsoft Windows マニュアルを参照してください。 Setnet32 について詳しくは、「IBM Informix: Installation Guide」を参照してくださ い。 Windows のみ の終り 重要: ifx_putenv() を使用する場合、アプリケーションは他の Informix ライブラリ ルーチンを呼び出す前に、すべての環境変数を設定する必要があります。こ れにより、GLS ルーチンの初期化、ロケールの値の凍結、および環境変数の フォーマットを回避します。 GLS 関連の環境変数 本節では、Informix データベース サーバおよび SQL API 製品に設定できる、 GLS 関連の環境変数をリストします。 UNIX のみ UNIX 上の IBM Informix ゲートウェイ 製品は、GL_PATH 環境変数を使用して GLS コード セット変換表のデフォルトの位置を上書きします。詳しくは、 Enterprise Gateway のマニュアルを参照してください。 UNIX のみ の終り CC8BITLEVEL CC8BITLEVEL 環境変数は、ESQL/C フィルタである esqlmf が非 ASCII (8 ビッ トおよびマルチバイト) 文字に対して実行する処理のタイプを決定します。 135 ペ ージの『非 ASCII ファイル名の生成』も参照してください。 CC8BITLEVEL 38 0 1 2 3 要素 説明 0 esqlmf フィルタは、リテラル文字列およびコメント内のすべての 非 ASCII 文字を 8 進定数に変換します (非 ASCII 文字のこれらの 使用法をサポートしない C コンパイラ用)。 1 esqlmf フィルタは、リテラル文字列内の非 ASCII 文字を 8 進定 数に変換しますが、コメント内の非 ASCII 文字は許可します (C コンパイラには、コメント内の非 ASCII 文字をサポートするもの があります)。 2 esqlmf フィルタは、リテラル文字列内の非 ASCII 文字を許可し、 非 ASCII 文字のすべてのバイトに 8 番目のビット セットがある ことを保証します (これを要件とする C コンパイラ用)。 IBM Informix GLS: ユーザーズ ガイド 3 esqlmf フィルタは、非 ASCII 文字をフィルタ処理しません (リテ ラル文字列およびコメント内のマルチバイト文字をサポートする C コンパイラ用)。 esql コマンドを使用して ESQL/C ファイルを処理するたびに、esqlmf を起動する には、ESQLMF 環境変数を 1 に設定します。 CC8BITLEVEL を設定しない場 合、esql コマンドは、CC8BITLEVEL の値が 0 であると仮定します。 重要: ESQLMF を有効にするには、CC8BITLEVEL を 3 に設定してはいけませ ん。 CLIENT_LOCALE CLIENT_LOCALE 環境変数はクライアント ロケール を指定します。このクライア ント ロケールは、クライアント アプリケーションが操作の読取りおよび書込み、 エンド ユーザ フォーマット、および ESQL 文の処理を行うときに使用します。 17 ページの『クライアント ロケール』も参照してください。 CLIENT_LOCALE Language _ territory . code_set @modifier 要素 説明 code_set ロケールによりサポートされるコード セットの名前。 language 特定のロケールの言語を表す 2 文字の名前。 modifier 最大で 4 文字の英数字のオプションのロケール修飾子。 territory 文化上の慣習を表す 2 文字の名前。たとえば、territory は、スイス で話されるフランス語、ドイツ語、またはイタリア語を指定するこ とができます。 modifier を指定することにより、language および territory の設定値によって暗黙指 定される国/地域別情報の設定値が修正されます。通常、modifier は、ロケールによ りサポートされる特殊なローカライズ照合順序を指示します。 フランス系カナダ ロケール用の非デフォルト クライアント ロケールの例は、次の とおりです。 CLIENT_LOCALE fr_ca.8859-1 UNIX のみ glfiles ユーティリティを使用して、UNIX システム上で使用できる GLS ロケール のリストを生成できます。詳しくは、165 ページの『glfiles ユーティリティ (UNIX のみ)』を参照してください。 UNIX のみ の終り CLIENT_LOCALE を設定しない場合、クライアント アプリケーションはデフォル ト ロケールの米国英語 (U.S. English) をクライアント ロケールとして使用しま す。 第 2 章 GLS 環境変数 39 Windows のみ CLIENT_LOCALE への変更内容は、HKEY_LOCAL_MACHINE の下の Windows レジストリ データベースにも入力されます。 Windows のみ の終り DBDATE IBM Informix 製品は、以前の製品との互換性を目的として DBDATE 環境変数をサ ポートします。新しいアプリケーションで GL_DATE 環境変数を使用することをお 勧めします。 DBDATE 環境変数は、日付 (DATE) 型列の値のエンド ユーザ フォーマットを指 定します。エンド ユーザ フォーマットについては、12 ページの『エンド ユーザ フォーマット』を参照してください。 重要: DBDATE は、システムの初期化時に評価されます。これが無効である場合、 システムの初期化は失敗します。 (1) 標準 DBDATE フォーマット DBDATE (2) 元号ベース DBDATE フォーマット 注: 1 SQLR を参照 2 140 ページを参照 重要: DBDATE 変数は、GL_DATE 環境変数より優先されます。同様に、 CLIENT_LOCALE が指定するデフォルトの日付 (DATE) 型のフォーマット よりも優先されます。 DBLANG DBLANG 環境変数は、IBM Informix 製品が使用するカスタマイズ済み言語特有メ ッセージ ファイルが含まれる、INFORMIXDIR のサブディレクトリを指定します。 DBLANG 40 relative_path full_path locale_name 要素 説明 relative_path Informix インストール ディレクトリのサブディレクトリ (INFORMIXDIR によって指定される)。 full_path コンパイル済みメッセージ ファイルが含まれるディレクトリの絶対 パス名。 locale_name GLS ロケールの名前であり、そのフォーマットは lg_tr.code_set で す。ここで、lg は特定のロケールの言語を表す 2 文字の名前、tr は文化上の慣習を表す 2 文字の名前、code_set はそのロケールがサ ポートするコード セットの名前です。 IBM Informix GLS: ユーザーズ ガイド IBM Informix 製品は、製品特有のメッセージ ファイルを次の順序で探します。 1. DBLANG が full_path に設定されている場合: full_name が示すディレクトリ。 2. DBLANG が relative_path に設定されている場合: a. UNIX 上の $INFORMIXDIR/msg/$DBLANG、または Windows 上の %INFORMIXDIR%¥msg¥%DBLANG%。 b. UNIX 上の $INFORMIXDIR/$DBLANG、または Windows 上の %INFORMIXDIR%¥%DBLANG%。 3. DBLANG が locale_name に設定されている場合: UNIX システム上の $INFORMIXDIR/msg/lg_tr/code_set、または、Windows 上の %INFORMIXDIR%¥msg¥lg_tr¥code_set にある、ロケールの msg サブディレ クトリ。ここで、lg、tr および code_set は、それぞれ、locale_name の言 語、地域、およびコード セットです。 DBLANG の値は、データベース サーバがそのメッセージ ログに書き込むメッ セージには影響しません。データベース サーバは、これらのメッセージのロケ ールを SERVER_LOCALE 環境変数から取得します。 4. DBLANG が選択されていない 場合: UNIX システム上の $INFORMIXDIR/msg/lg_tr/code_set、または、Windows 上の %INFORMIXDIR%¥msg¥lg_tr¥code_set にある、ロケールの msg サブディレ クトリ。ここで、lg と tr は、IBM Informix 製品に関連付けられたロケールか ら取得される言語と地域で、code_set は、そのロケールがサポートするコード セットのコンデンス名です。 v IBM Informix クライアント製品の場合: lg と tr はクライアント ロケールか ら取得されます (CLIENT_LOCALE が設定されている場合には、その値から 取得されます)。 v Informix データベース サーバ製品の場合: lg と tr はサーバ ロケールから取 得されます (SERVER_LOCALE が設定されている場合には、その値から取得 されます)。 5. DBLANG、CLIENT_LOCALE、および LANG が設定されていない場合: a. UNIX システム上の $INFORMIXDIR/msg/en_us/0333、または Windows 上 の %INFORMIXDIR%¥msg¥en_us¥0333 にある、デフォルト ロケールの内 部メッセージ ディレクトリ。 b. UNIX システム上の $INFORMIXDIR/msg、または Windows 上の %INFORMIXDIR%¥msg にあるデフォルトの Informix メッセージ ディレク トリ。 コンパイル済みメッセージ ファイルのファイル拡張子は、.iem です。 DB_LOCALE DB_LOCALE 環境変数は、データベース ロケール を指定します。データベース サーバは、このデータベース ロケールを使用して、ロケールを区別するデータを処 理します。 19 ページの『データベース ロケール』と 153 ページの『GLS ファイ ルの管理』を参照してください。 DB_LOCALE language _ territory . code_set @modifier 第 2 章 GLS 環境変数 41 要素 説明 code_set ロケールによりサポートされるコード セットの名前。 language 特定のロケールの言語を表す 2 文字の名前。 modifier 最大で 4 文字の英数字のオプションのロケール修飾子。 territory 文化上の慣習を表す 2 文字の名前。たとえば、territory は、スイス で話されるフランス語、ドイツ語、またはイタリア語を指定するこ とができます。 modifier を指定することにより、language および territory の設定値によって暗黙指 定される国/地域別情報の設定値が修正されます。 modifier は、ロケールによりサポ ートされるローカライズ照合順序を指示できます。たとえば、@ modifier を設定し て辞書または電話帳の照合順序を指定できます。 フランス系カナダ ロケール用の非デフォルト データベース ロケールの例は、次の とおりです。 DB_LOCALE fr_ca.8859-1 UNIX のみ glfiles ユーティリティを使用して、UNIX システム上で使用できる GLS ロケール のリストを生成できます。詳しくは、165 ページの『glfiles ユーティリティ (UNIX のみ)』を参照してください。 UNIX のみ の終り Dynamic Server SET COLLATION 文は、DB_LOCALE ロケールの COLLATION 設定値とは異な るローカライズ順序の照合を、現行セッションに指定できます。この指定は、各国 語文字 (NCHAR) 型データ値と各国語可変長 (NVARCHAR) 型データ値のソート操 作に影響を及ぼします。 Dynamic Server の終り クライアント コンピュータに DB_LOCALE を設定しない場合、クライアント ア プリケーションは、データベース ロケールが CLIENT_LOCALE 環境変数の値を持 っていると仮定します。ただし、クライアント アプリケーションは、接続要求時 に、このデフォルト値をデータベース サーバに送信しません。 Windows のみ DB_LOCALE への変更内容は、HKEY_LOCAL_MACHINE の下の Windows レジス トリ データベースにも入力されます。 Windows のみ の終り 42 IBM Informix GLS: ユーザーズ ガイド DBMONEY DBMONEY 環境変数は、金額 (MONEY) 型列の値のエンド ユーザ フォーマット を指定します。 12 ページの『エンド ユーザ フォーマット』も参照してくださ い。 DBMONEY ’$’ front . , back 要素 説明 front 通貨値の前に表示される通貨記号を指定します。 back 通貨値の後に指定される通貨記号を指定します。 , (カンマ)、 . (ピリオド) 通貨小数点記号。カンマまたはピリオドを指定すると、3 桁区切り 記号に他の記号を暗黙的に割り当てることになります。 この環境変数を使用して、通貨表記を指定できます。 v 通貨値の前または後に表示される通貨記号。 v 通貨小数点記号。通貨値の整数部分を、小数部分と分けます。 たとえば、「DM,」を DBMONEY 設定として使用するとします。この DBMONEY 設定は、次の通貨表記を指定します。 v 通貨記号 DM が通貨値の前に表示されます。 v 小数点記号はカンマです。 v 3 桁区切り記号は (暗黙的に) ピリオド (.) です。 クライアント ロケールが非 ASCII 文字を定義するコード セットをサポートする場 合、front または back 記号に非 ASCII 文字を使用できます。文字でない記号は、 引用符で囲む必要があります。ピリオドまたはカンマは、有効な front 記号または back 記号ではありません。デフォルト ロケールでは、ドル ( $ ) 記号がデフォル トの front 通貨記号、ピリオド ( . ) がデフォルトの小数点記号、およびカンマ ( , ) がデフォルトの 3 桁区切り記号です。 DBMONEY 設定は、ロケールの MONETARY カテゴリにより定義されるどの表記よりも優先されます。 36 ページ の『通貨値のカスタマイズ』も参照してください。 ヨーロッパの言語の多くの GLS ロケールでは、通貨値のユーロ記号を含むコード セットがサポートされます。 DBNLS (IDS のみ) DBNLS 環境変数は、クライアント システムの各国語文字 (NCHAR) 型データベー ス列と各国語可変長文字 (NVARCHAR) 型データベース列との間、および文字 (CHAR) 型変数と可変長文字 (VARCHAR) 型変数との間での (それぞれの) 自動デ ータ型変換がサポートされるかどうかを指定します。 広域言語サポート (GLS) では、DBNLS 環境変数は不要です。ただし、Dynamic Server データベースは継続して DBNLS の既存の動作をサポートします。これによ り、各国語文字 (NCHAR) 型列または各国語可変長文字 (NVARCHAR) 型列のある 表を操作するアプリケーションがサポートされます。 第 2 章 GLS 環境変数 43 DBNLS ’1’ ’2’ C シェルを使用する UNIX システムの場合、このコマンドを使用して、 DB-Access、IBM Informix SQL、IBM Informix 4GL、IBM Informix Dynamic 4GL、 および SQL アプリケーション (たとえば ESQL/C) などのクライアント アプリケ ーションで、クライアント アプリケーションの文字 (CHAR) 型変数と可変長文字 (VARCHAR) 型変数との間、およびデータベースの各国語文字 (NCHAR) 型列と各 国語可変長文字 (NVARCHAR) 型列との間で自動的に変換を行うことができます。 setenv DBNLS 1 また、この設定は、各国語文字 (NCHAR) 型列から抽出された値の、文字 (CHAR) 型変数への自動変換、および各国語可変長文字 (NVARCHAR) 型列の値の、可変長 文字 (VARCHAR) 型変数への自動変換もサポートします。 同様に、DBNLS = 1 のとき、文字 (CHAR) 型変数として格納された文字列を各国 語文字 (NCHAR) 型列に挿入でき、可変長文字 (VARCHAR) 型変数として格納され た文字列を各国語可変長文字 (NVARCHAR) 型データベース列に挿入できます。 この機能をサポートするには、クライアント システム上でも DBNLS を 1 に設定 する必要があります。この設定により、クライアント システムで、日付、数値、お よび通貨値をクライアント ロケールに指定されたフォーマットで表示することもで きます。 逆に、DBNLS の値を指定しないと、クライアント アプリケーションの文字 (CHAR) 型変数と可変長文字 (VARCHAR) 型変数との間、およびデータベースの各 国語文字 (NCHAR) 型列と各国語可変長文字 (NVARCHAR) 型列との間での自動変 換が使用不可になります。また、Dynamic Server は、クライアント システムのロケ ール ファイルを使用できません。 setenv DBNLS unsetenv DBNLS DBNLS のもう 1 つの可能な設定は 2 です。その場合、次のコマンドを使用しま す。 setenv DBNLS 2 この設定は、(クライアント システムの DBNLS が 1 または 2 に 設定されている 場合) 各国語文字 (NCHAR) 型と文字 (CHAR) 型との間、および各国語可変長文字 (NVARCHAR) 型と可変長文字 (VARCHAR) 型との間での自動データ型変換をサポ ートします。クライアントとデータベース サーバのロケールには、異なるロケール を使用できます。 DBTIME (E/C のみ) IBM Informix 製品は、以前の製品との互換性を目的として DBTIME をサポートし ます。新しいアプリケーションで GL_DATETIME 環境変数を使用することをお勧 めします。 DBTIME 環境変数は、SQL API ルーチンの日時 (DATETIME) 型列の 値のエンド ユーザ フォーマットを指定します。 12 ページの『エンド ユーザ フ ォーマット』も参照してください。 44 IBM Informix GLS: ユーザーズ ガイド (1) DBTIME Standard DBTIME Formats (2) Era-Based DBTIME Formats 注: 1 SQLR を参照 2 143 ページを参照 ヒント: DBTIME は、ESQL/C 関数ライブラリ内のフォーマット ルーチンにのみ影 響を与えます。 142 ページの『DATETIME フォーマット関数』を参照し てください。 ESQLMF ESQLMF 環境変数には、1 または 0 の値を指定できます。 ESQLMF 0 1 要素 説明 0 esql は、非 ASCII 文字が既に変換済みであるソース コードをコ ンパイルします。 1 esql は esqlmf を起動して、 ESQL/C ソース ファイルのプリプ ロセス時にマルチバイト文字をフィルタ処理します。 ESQLMF 環境変数は、esql コマンドが自動的に ESQL/C マルチバイト フィルタ esqlmf を起動するかどうかを指示します。 CC8BITLEVEL 環境変数の値は、esqlmf が実行するフィルタ処理のタイプを決定 します。 esqlmf については、135 ページの『非 ASCII ファイル名の生成』を参 照してください。 重要: ESQLMF を有効にするには、CC8BITLEVEL を 3 に設定してはいけませ ん。 非 ASCII 文字が既に変換済みである既存のソース コードをコンパイルしたい場 合、ESQLMF を 0 に設定するか、または設定しないでください。どちらの場合 も、esql は esqlmf を起動しません。 GLS8BITFSYS GLS8BITFSYS 環境変数を使用して、(ESQL/C プロセッサなどの) IBM Informix 製品にオペレーティング システムが 8 ビット透過であるかどうかを通知します。 この設定により、IBM Informix 製品が、生成するオペレーティング システム ファ イルのファイル名に非 ASCII 文字を使用できるかどうかが決定されます。 GLS8BITFSYS 0 1 第 2 章 GLS 環境変数 45 要素 説明 0 IBM Informix 製品は、オペレーティング システムが 8 ビット透過 ではないと想定し、7 ビットの ASCII 文字のみを使用してファイ ル名を生成します。 1 IBM Informix 製品は、オペレーティング システムが 8 ビット透過 であると想定し、生成するオペレーティング システム ファイルの ファイル名に非 ASCII 文字 (8 ビットまたはマルチバイト文字) を 使用できます。 クライアント アプリケーション内で指定するファイル名に非 ASCII 文字を使用す る場合、サーバ処理ロケールのコード セットがこれらの非 ASCII 文字をサポート していることを確認する必要があります。 GLS8BITFSYS を設定しない場合、 Informix データベース サーバは GLS8BITFSYS が 1 に設定されているかのよう に振る舞います。 たとえば、次の SQL 文を使用して A1A2B1B2 という名前のデータベースを作成 します。この場合、A1A2 と B1B2 はマルチバイト文字です。 CREATE DATABASE A1A2B1B2 サーバ コンピュータ上で GLS8BITFSYS が 1 である (または設定されていない) 場合、データベース サーバは、オペレーティング システムが 8 ビット透過である と想定し、データベース ディレクトリ A1A2B1B2.dbs を生成します。 サーバ コンピュータ上で GLS8BITFSYS が 0 に設定されていて、ファイル名に 非 ASCII 文字を使用する場合、IBM Informix 製品は、内部アルゴリズムを使用し てこれらの非 ASCII 文字を ASCII 文字に変換します。結果のファイル名は 7 ビッ ト透過になります。 無効なバイト シーケンスのファイル名を GLS ベースの製品で使用すると、エラー が生成されます。 dbexport などの一部のデータベース ユーティリティ、および IBM Informix ESQL/C 製品のコンパイラのみが、ファイルを作成および使用するためにクライア ント コンピュータ上の GLS8BITFSYS を使用します。たとえば、A1A2B1B2.ec という名前の ESQL/C ソース ファイルをコンパイルするとします。この名前の、 A1A2 と B1B2 はマルチバイト文字です。クライアント コンピュータ上で GLS8BITFSYS が 1 に設定されている (または設定されていない) 場合、ESQL/C プロセッサは、A1A2B1B2.c という名前の中間 C ファイルを生成します。 GLS8BITFSYS を検査する ESQL/C ファイルのリストについては、134 ページの 『非 ASCII 文字の処理』を参照してください。 非 ASCII ファイル名に関する制約事項 ロケールが非 ASCII 文字を使用するコード セットをサポートする場合、 IBM Informix 製品により生成されるオペレーティング システム ファイルのファイ ル名に制約事項が適用されます。あなた、または IBM Informix 製品がファイルが 作成して、ファイル名を割り当てる前に、次の質問事項を検討してください。 v オペレーティング システムが非 ASCII ファイル名をサポートするかどうか? v IBM Informix 製品が非 ASCII ファイル名を受け入れるかどうか? 46 IBM Informix GLS: ユーザーズ ガイド オペレーティング システムが 8 ビット透過であることの確認: ファイル名での非 ASCII 文字をサポートするには、オペレーティング システムが 8 ビット透過 であ る必要があります。オペレーティング システムが 8 番目のビットをコード値の一 部として読み取る場合、そのオペレーティング システムは 8 ビット透過です。言 い換えると、オペレーティング システムは、8 番目のビットの値を無視したり、そ の値に対して独自の解釈を行ってはいけません。 オペレーティング システムのマニュアルを参照したり、またはシステム管理者に問 い合わせて、オペレーティング システムが 8 ビット透過であるかどうかを判別し てから、IBM Informix 製品が使用および生成するファイル名に非 ASCII 文字を含 める非デフォルト ロケールを使用することを決めてください。 製品により同じコード セットがサポートされていることの確認: IBM Informix 製 品によって、ファイル名に非 ASCII 文字が含まれているオペレーティング システ ム ファイルが生成されると、そのファイル名とファイル内容は、特定のコード セ ットで書き込まれます。 IBM Informix 製品またはクライアント アプリケーション がそのファイルにアクセスする必要があるときは、同じコード セットをサポートす るサーバ処理ロケールをその製品が使用していることを確認する必要があります。 サーバ コード セット: データベース サーバが、ファイル名に非 ASCII 文字が含 まれているファイルを作成するとき、サーバ ロケールがこれらの文字をサポートし ている必要があります。データベース サーバを開始する前に、SERVER_LOCALE 環境変数を、これらの非 ASCII 文字を含むコード セットを持つロケールの名前に 設定する必要があります。 たとえば、UNIX のパス /A1A2B1B2/C1C2D1D2 を使用するメッセージ ログを使 用すると想定します。ここで、A1A2、 B1B2、C1C2、および D1D2 は、日本語 SJIS コード セットのマルチバイト文字です。データベース サーバがコンピュータ 上にこのメッセージ ログ ファイルを作成できるようにするには、次を行います。 1. ONCONFIG ファイルの MSGPATH パラメータを修正します。 UNIX の場合: MSGPATH /A1A2B1B2/C1C2D1D2 # multibyte message-log filename Windows の場合: MSGPATH ¥A1A2B1B2¥C1C2D1D2 # multibyte message-log filename 2. サーバ コンピュータ上の SERVER_LOCALE 環境変数を日本語の SJIS ロケー ル ja_jp.sjis に設定します。 3. oninit ユーティリティを使用してデータベース サーバ 開始します。 データベース サーバの初期化時に、データベース サーバは、オペレーティング シ ステムが 8 ビット透過であると想定し、UNIX 上に /A1A2B1B2/C1C2D1D2 メッ セージ ログを、または Windows 上に ¥A1A2B1B2¥C1C2D1D2 ファイルを作成し ます。 クライアント コード セット: ESQL/C プロセッサが、ファイル名に非 ASCII 文 字が含まれているファイルを作成するとき、クライアント ロケールはこれらの非 ASCII 文字をサポートしている必要があります。 Informix データベース サーバを 第 2 章 GLS 環境変数 47 開始する前に、クライアント ロケールのコード セット (クライアント コード セ ット) にこれらの文字が含まれていることを確認する必要があります。 非デフォルト ロケールを使用するときは、CLIENT_LOCALE 環境変数を、これら の非 ASCII 文字を含むコード セットを持つロケールの名前に設定する必要があり ます。 たとえば、パスが /A1A2B1B2/C1C2D1D2 である ESQL/C ソース ファイルを処理 したいと想定します。ここで、A1A2、B1B2、C1C2、および D1D2 は、日本語 SJIS コード セットのマルチバイト文字です。 esql コマンドでクライアント コン ピュータ上に中間 C ソース ファイルを作成できるようにするには、次の手順を行 う必要があります。 1. クライアント コンピュータ上の CLIENT_LOCALE 環境変数を日本語の SJIS ロケール ja_jp.sjis に設定します。 2. esql コマンドを使用して ESQL/C ソース ファイルを処理します。 ファイル名に関連付けられたコード セットと、クライアント ロケールに関連付け られたコード セットが一致しない場合、有効なファイル名に、クライアント ロケ ールで無効な文字が含まれる場合があります。 ESQL/C プロセッサは無効な文字を 含むファイル名を拒否し、次のエラー メッセージを表示します。 Illegal characters in filename. GL_DATE GL_DATE 環境変数は、日付 (DATE) 型列の値のエンド ユーザ フォーマットを指 定します。エンド ユーザ フォーマットについては、12 ページの『エンド ユーザ フォーマット』を参照してください。 重要: GL_DATE は、設定時ではなく使用時に評価されます。無効である場合、操 作は失敗します。 GL_DATE ’string’ (1) 読取りのフォーマット修飾子 (2) 印刷のフォーマット修飾子 注: 1 51 ページの『オプションの日付フォーマット修飾子』 2 51 ページの『オプションの日付フォーマット修飾子』 要素 説明 string GL_DATE 値のエンド ユーザ フォーマットを指定するフォーマッ ト ディレクティブ。日付をフォーマットする任意のフォーマット ディレクティブを使用できます。 GL_DATE のエンド ユーザ フォーマットには、次の文字を含めることができま す。 v ロケールの CTYPE カテゴリが指定する 1 つ以上の空白文字。 v 通常の文字 (% 記号または空白文字以外)。 v フォーマット ディレクティブ。% 記号の後に、必要な置換えを指定する変換文 字が続きます。 48 IBM Informix GLS: ユーザーズ ガイド 次のリストでは、元号に基づかないフォーマット ディレクティブを説明します。 フォーマット ディレクティブ 説明 %a %A %b %B %C %d %D %e %h %iy %iY %m %n %t %w %x %y %Y %% ロケールに定義されているように曜日の省略名に置き換えられます。 ロケールに定義されているように曜日の完全名に置き換えられます。 ロケールに定義されているように月の省略名に置き換えられます。 ロケールに定義されているように月の完全名に置き換えられます。 整数 (00 から 99) として、世紀の数値 (100 で除算し、整数に切り捨てら れた年) に置き換えられます。 整数 (01 から 31) として、日付に置き換えられます。 1 桁の数字は、その 前にゼロ (0) が付きます。 %m/%d/%y フォーマットと同一です。 数値 (1 から 31) として、日付に置き換えられます。 1 桁の数字は、その 前に空白が入ります。 %b フォーマット ディレクティブと同一です。 読取りと出力の両方で、2 桁の数値 (00 から 99) として、年に置き換えら れます。これは、%y の Informix 特有のフォーマット ディレクティブで す。 読取りと出力の両方で、4 桁の数値 ((0000 から 9999) として、年に置き換 えられます。これは、%y の Informix 特有のフォーマット ディレクティブ です。 数値 (01 から 12) として、月に置き換えられます。 復帰改行文字に置き換えられます。 TAB 文字に置き換えられます。 数値 (0 から 6) として、曜日に置き換えられます。 0 は、ロケールで日曜 日と等価であることを表します。 ロケールが定義する特殊な日付表記に置き換えられます。 読取りと出力の両方で、年が 2 桁の数値 (00 から 99) である必要がありま す。 読取りと出力の両方で、年 が 4 桁の数値 (0000 から 9999) である必要が あります。 % に置き換えられます (フォーマット文字列で % を使用できるように)。 空白文字、またはその他の英数字以外の文字は、2 つのフォーマット ディレクティ ブの間に表示される必要があります。たとえば、米国英語 (U.S. English) ロケール を使用する場合、03/05/1997 の内部日付 (DATE) 型値を、 ASCII 文字列にフォー マットしたい場合があります。その例を下に示します。 Mar 05, 1997 (Wednesday) これを行うには、GL_DATE 環境変数を次のように設定します。 %b %d, %Y (%A) GL_DATE フォーマットが有効なフォーマット ディレクティブに一致していない場 合、フォーマットを行おうとしたときの IBM Informix 製品の動作は未定義です。 重要: DBDATE 変数の設定は、GL_DATE 環境変数の設定より優先されます。同様 に、CLIENT_LOCALE が指定するデフォルトの日付 (DATE) 型のフォーマ ットよりも優先されます。 第 2 章 GLS 環境変数 49 年のフォーマット ディレクティブ GL_DATE 環境変数のエンド ユーザ フォーマットに %y、%iy、 %Y、および %iY フォーマット ディレクティブを使用して、日付文字列の年をフォーマットで きます。 %iy および %iY フォーマット ディレクティブにより、DBDATE 環境変 数の Y2 および Y4 の年の指定子との互換性が提供されます。 エンド ユーザ フォーマットについては、12 ページの『エンド ユーザ フォーマッ ト』を参照してください。 IBM Informix 製品がエンド ユーザ フォーマットを使用して内部日付値を文字列と して出力する とき、%iy および %iY ディレクティブは %y および %Y と同一の タスクをそれぞれ実行します。これらのフォーマット ディレクティブのうちのいず れかを使用して年を出力するために、IBM Informix 製品は次の操作を実行します。 v %iy フォーマット ディレクティブと %y フォーマット ディレクティブの両方 が、内部日付値の年を 2 桁の 10 年で出力します。 たとえば、GL_DATE を「%y %m %d」または「%iy %m %d」に設定すると、March 5, 1997 の内部日付フォーマットは「97 03 05」になります。 v %iY フォーマット ディレクティブと %Y フォーマット ディレクティブの両方 が、内部日付値の年を 4 桁の年で出力します。 たとえば、GL_DATE を「%Y %m %d」または「%iY %m %d」に設定すると、March 5, 1997 の内部日付フォーマットは「1997 03 05」になります。 IBM Informix 製品がエンド ユーザ フォーマットを使用して日付を読み取る と き、%iy および %iY フォーマット ディレクティブの実行方法は、それぞれ %y および %Y とは異なります。次の表は、IBM Informix 製品が年のフォーマット デ ィレクティブを使用して日付文字列を読み取るときの、年のフォーマット ディレク ティブの動作方法を要約したものです。 読み取る日付文字列 GL_DATE Format %y %m %d %iy %m %d %Y %m %d %iY %m %d ’1994 03 06’ エラー 1994 03 06 の内部日付 1994 03 06 の内部日付 1994 03 06 の内部日付 ’94 03 06’ 1994 03 06 1994 03 06 0094 03 06 1994 03 06 の内部日付 の内部日付 の内部日付 の内部日付 日付文字列の読取り時には、%iy と %y フォーマット ディレクティブは両方と も、現行の年の最初の 2 桁を前に付けて 1 桁または 2 桁の年を拡張します。 DBCENTURY 環境変数を設定してこのデフォルトを変更できます。 代替日付フォーマット エンド ユーザ フォーマットの代替日付フォーマットをサポートするために、 GL_DATE に次の変換修飾子 を適用します。 v E は、ロケールが定義する代替元号フォーマットの使用を指示します。 v O (文字 O) は、ロケールが定義する代替数字の使用を指示します。 50 IBM Informix GLS: ユーザーズ ガイド これらの日付のフォーマット ディレクティブは、変換修飾子をサポートできます。 日付 フォーマ ット %EC %Eg %Ex %Ey %EY %Od %Oe %Om %Ow %Oy %OY 説明 読取りの場合、元号名の完全形または省略形を適用します。出力の場合、%EC は、ロケールが定義する元号の基本年 (時代) の完全な名前に置き換えられます (ロケールが元号を定義していない場合、%C と同じ)。 読取りの場合、元号名の完全形または省略形を適用します。出力の場合、%Eg は、ロケールが定義する元号の基本年 (時代) の省略名に置き換えられます (ロ ケールが元号を定義していない場合、%C と同一)。 ロケールが定義する元号の特殊な日付表記に置き換えられます (ロケールが元号 を定義していない場合、%x と同一)。 ロケールが定義する元号の %EC からのオフセットに置き換えられます。この日 付は、元号の年のみです (ロケールが元号を定義していない場合、%y と同一)。 ロケールが定義する完全な元号の年に置き換えられます (ロケールが元号を定義 していない場合、%Y と同一)。 ロケールが定義する代替数字の日付に置き換えられます (ロケールが代替数字を 定義していない場合、%d と同一)。 %Od (または、ロケールが代替数字を定義していない場合、%e) と同一です。 ロケールが定義する代替数字の月に置き換えられます (ロケールが代替数字を定 義していない場合、%m と同一)。 ロケールが定義する代替数字の 1 桁の数値 (0 から 6) として、曜日に置き換え られます (ロケールが代替数字を定義していない場合、%w と同一)。ゼロ (0) と等価であるということは、ロケールで日曜日と等価であることを表します。 ロケールが定義する代替数字の 2 桁の数値 (00 から 99) として、年に置き換え られます (ロケールが代替数字を定義していない場合、%y と同一)。年の値のフ ォーマット方法の情報については、%y の説明を参照してください。 %EY (または、ロケールが代替数字を定義していない場合、%Y) と同一です。 ロケールの TIME カテゴリは、次の元号情報を定義します。 v 元号の完全名と省略名 v (%Ex ディレクティブが使用する) 元号の表記 ロケールの NUMERIC カテゴリは、ロケールの代替数字を定義します (この数字 は、%Ox フォーマット ディレクティブによって使用される)。 オプションの日付フォーマット修飾子 フォーマット ディレクティブの % 記号の直後にオプションのフォーマット修飾子 を指定できます。日付フォーマット修飾子は、読取りまたは出力操作用での日付の フィールド仕様を定義します。次の節では、読取りおよび出力操作でのフィールド 仕様の意味を説明します。エンド ユーザ フォーマットについては、12 ページの 『エンド ユーザ フォーマット』を参照してください。 ヒント: GL_DATETIME 環境変数には、55 ページの『オプションの時刻フォーマッ ト修飾子』にリストされたものに加え、これらの日付フォーマット修飾子 も適用されます。 日付 (DATE) 型値の読取りのフィールド仕様: IBM Informix 製品がエンド ユーザ フォーマットを使用して日付文字列を読み取るとき、フィールド仕様は入力として 予期される文字数を定義します。このフィールド仕様の構文は、次のとおりです。 第 2 章 GLS 環境変数 51 読取りのフォーマット修飾子 0 max_width . min_width 要素 説明 - (負符号) フィールド値は左寄せ され、数字で始まります。この値には後続の 空白文字を含めることができます。 0 (ゼロ) フィールド値は右寄せ されます。値の左にゼロがある場合は、ゼロ は無効な埋込み文字です。 max_width 読み取る最大文字数を指示する整数。 min_width 読み取る最小文字数を指示する整数。 フィールド仕様の先頭文字は、フィールド値の位置合せ、または埋込みが行われる と想定されるかどうかを指示します。先頭文字が負符号 (-) でもゼロでもない場 合、IBM Informix 製品は、そのフィールド値が右そろえ され、フィールド値の左 側のスペースは埋込み文字であると想定します。 しかし、フィールド値がゼロから始まる場合、埋込み文字は使用できません。 IBM Informix 製品は、フィールド値が数値でない場合、そのフィールド仕様を無視 します。 日付 (DATE) 型値の表示のフィールド仕様: IBM Informix 製品がエンド ユーザ フォーマットを使用して日付文字列を出力するとき、フィールド仕様は出力として 表示される文字数を定義します。フィールド仕様の構文は、次のとおりです。 出力のフォーマット修飾子 0 width . precision 要素 説明 - (負符号) フィールド値は左寄せ され、数字から始まります。値には後続の空 白を含めることができます。 0 (ゼロ) フィールド値は右寄せ されます。左にゼロがある場合は、そのゼロ は埋込み文字であり、無効です。 width 出力する値の最小フィールド幅を指示する整数。 precision フィールド値に使用する精度を指示する整数。 precision の値の意味は、次の表に示すとおり、その値を使用するフォーマット ディ レクティブにより異なります。 52 IBM Informix GLS: ユーザーズ ガイド フォーマット ディレクティブ 説明 precision の値は、出力する最小桁数を指定します。 precision が指定す る桁数よりも少ない桁数を値が指定した場合、IBM Informix 製品は先行 ゼロでその値を埋め込みます。 %d、%Ey、%iy、%m、%w、および %y フォーマット ディレクティブのデフォルトの精度は 2 です。%Y ディレクティブにはデフォルトの精度はありません。0001 年は、0001 ではなく 1 としてフォーマットされます。 precision の値は、出力する最大文字数を指定します。 precision が指定 %a、%A、%b、 %B、%EC、%Eg、 する文字数よりも多い文字数を値が指定した場合、IBM Informix 製品は その値を切り捨てます。 %h %D width と precision の値は、これらのフォーマット ディレクティブのそ れぞれの要素に影響を与えます。たとえば、フィールド仕様が %6.4D の場合、日付 (DATE) 型値は、フォーマットが %6.4m/%6.4d/%6.4y で あるかのように表示されます。ここで、4 文字以上 (かつ 6 文字以下) の文字は、月、日、および年の値をこの順で表しており、分離記号とし て「/」を使用します。 %Ox O 修飾子 (代替数字) を含むフォーマット ディレクティブの場合、 precision の値は、やはり、出力する最小桁数です。 width 値は、実際の 桁数ではなくフォーマットの幅を定義します。 %Ex、%EY、%n、 width および precision の値は、これらのフォーマット ディレクティブ %t、%x、%% には影響を与えません。 %C、%d、%e、 %Ey、%iy、 %iY、%m、 %w、%y、%Y たとえば、次のフォーマット ディレクティブは、月を、最大フィールド幅が 4 で ある整数として表示します。 %4m 次のフォーマット ディレクティブは、日付を、最小フィールド幅が 3 で、最大フ ィールド幅が 4 である整数として表示します。 %4.3d GL_DATETIME GL_DATETIME 環境変数は、日時 (DATETIME) 型列の値のエンド ユーザ フォー マットを指定します。エンド ユーザ フォーマットについては、12 ページの『エン ド ユーザ フォーマット』を参照してください。 GL_DATETIME フォーマットには、次の文字を含めることができます。 v ロケールの CTYPE カテゴリが指定する 1 つ以上の空白文字。 v 通常の文字 (% 記号または空白文字以外)。 v フォーマット ディレクティブ。% 記号の後に、必要な置換えを指定する変換文 字が続きます。 GL_DATETIME ’string’ (1) オプションの時刻フォーマット修飾子 注: 1 55 ページの『オプションの時刻フォーマット修飾子』 第 2 章 GLS 環境変数 53 要素 説明 string GL_DATETIME 値のエンド ユーザ フォーマットを指定するフォー マット ディレクティブを含みます。日付または時刻をフォーマット する任意のフォーマット ディレクティブを使用できます。日付のフ ォーマット ディレクティブのリストについては、48 ページの 『GL_DATE』を参照してください。 このリストでは、元号に基づかない時刻のフォーマット ディレクティブを説明しま す。 フォーマット ディレクティ ブ %c %Fn %H %I %M %p %r %R %S %T %X %% 説明 ロケールが定義する特殊な日時表記に置き換えられます。 秒の小数部の値に置き換えられます。精度は、整数 n で指定されます。 n のデフォルト値は 2 です。n の範囲は、0 £ n £ 5 です。この値は、% か ら F 文字の間にある幅または精度を上書きします。詳しくは、55 ページの 『オプションの時刻フォーマット修飾子』を参照してください。 整数 (00 から 23) として、時間に置き換えられます (24 時間時計)。 整数 (00 から 12) として、時間に置き換えられます (12 時間時計)。 整数 (00 から 59) として、分に置き換えられます。 ロケールに定義されている、A.M. または P.M. に相当するものに置き換えら れます。 ロケールに定義されている 12 時間時計フォーマット (A.M. または P.M. に 相当するものを含む) の、一般によく使用される時刻表記に置き換えられま す。 24 時間表記の時刻 (%H:%M) に置き換えられます。 整数 (00 から 61) として、秒に置き換えられます。秒には、特別な場合のた めのうるう秒および 2 倍のうるう秒に対応するために、59 ではなく 61 ま で使用できます。 %H:%M:%S フォーマットの時刻に置き換えられます。 ロケールに定義されている一般によく使用される時刻表記に置き換えられま す。 % に置き換えられます (フォーマット文字列で % を使用できるように)。 空白文字、またはその他の英数字以外の文字は、2 つのフォーマット ディレクティ ブの間に表示される必要があります。フォーマット ディレクティブとして上記にリ ストされているもの以外の、GL_DATETIME 設定内の文字は、リテラル文字である と解釈されます。 GL_DATETIME フォーマットが有効なフォーマット ディレクテ ィブに一致していない場合、フォーマットを行おうとしたときの IBM Informix 製 品の動作は未定義です。 前述の表でリストしたフォーマット ディレクティブに加えて、次の日付のフォーマ ット ディレクティブを GL_DATETIME のエンド ユーザ フォーマットに含めるこ とができます。 %a, %A, %b, %B, %C, %d, %D, %e, %h, %iy, %iY, %m, %n, %t, %w, %x, %y, %Y, %% たとえば、米国英語 (U.S. English) ロケールを使用する場合、内部 DATETIME YEAR TO SECOND 値を ASCII 文字列フォーマットに変更したい場合がありま す。その例を下に示します。 54 IBM Informix GLS: ユーザーズ ガイド Mar 21, 1997 at 16 h 30 m 28 s これを行うには、次の行で示すように、GL_DATETIME 環境変数を設定します。 %b %d, %Y at %H h %M m %S s 重要: GL_DATETIME の 値は、DBTIME 環境変数が設定されていない場合、ある ESQL/C ライブラリ関数の動作に影響を与えます。ライブラリ関数への影響 の情報については、142 ページの『DATETIME フォーマット関数』を参照し てください。 DBTIME の値は、GL_DATETIME の値より優先されます。 代替時刻フォーマット エンド ユーザ フォーマットの代替時刻フォーマットをサポートするために、 GL_DATETIME に、次の変換修飾子 を適用します。 v E は、ロケールが定義する代替元号フォーマットの使用を指示します。 v O (文字 O) は、代替数字の使用を指示します。この代替数字は、ロケールも定義 しています。 次の表は、変換修飾子をサポートする時刻フォーマット ディレクティブを示したも のです。 代替時刻 フォーマット %Ec %EX %OH %OI %OM %OS 説明 ロケールが定義する元号の特殊な日付/時刻に置き換えられます。ロケールが 元号を定義していない場合、%c と同一です。 ロケールが定義する元号の特殊な時刻表記に置き換えられます。ロケールが 元号を定義していない場合、%X と同一です。 ロケールが定義する代替数字の時間 (24 時間時計) に置き換えられます。 (ロケールが代替数字を定義していない場合、%H と同一です)。 ロケールが定義する代替数字の時間 (12 時間時計) に置き換えられます。 (ロケールが代替数字を定義していない場合、%I と同一です)。 ロケールが定義する代替数字の分に置き換えられます。ロケールが代替数字 を定義していない場合、%M と同一です。 ロケールが定義する代替数字の秒に置き換えられます。ロケールが代替数字 を定義していない場合、%S と同一です。 ロケールの TIME カテゴリは、次の元号情報を定義します。 v 元号の完全名と省略名 v 元号の特殊な日付表記 (%Ex フォーマット ディレクティブが使用するもの) v 元号の特殊な時刻表記 (%EX フォーマット ディレクティブが使用するもの) v 元号の特殊な日時表記 (%Ec フォーマット ディレクティブが使用するもの) ロケールの NUMERIC カテゴリは、ロケールの代替数字を定義します (この数字 は、%Ox フォーマット ディレクティブによって使用されます)。 オプションの時刻フォーマット修飾子 フォーマット ディレクティブの % 記号の直後に次のオプションのフォーマット修 飾子 を指定できます。時刻フォーマット修飾子は、IBM Informix 製品が読み取る または出力する時刻 (または日時) のフィールド仕様を定義します。本節では、出力 操作におけるフィールド仕様の意味を説明します。読取り操作におけるフィールド 第 2 章 GLS 環境変数 55 仕様の意味の説明については、51 ページの『日付 (DATE) 型値の読取りのフィー ルド仕様』を参照してください。エンド ユーザ フォーマットについては、12 ペー ジの『エンド ユーザ フォーマット』を参照してください。 IBM Informix 製品がエンド ユーザ フォーマットを使用して内部フォーマットから 文字列を出力するとき、フィールド仕様は出力として表示される文字数を定義しま す。このフィールド仕様の構文は、次のとおりです。 オプションの時刻フォーマット修飾子 0 width . precision 要素 説明 - (負符号) IBM Informix 製品は、フィールド値を左そろえ して出力し、この 値の右側は空白で埋め込みます。 0 (ゼロ) IBM Informix 製品は、フィールド値を右そろえ して出力しこの値 の左側はゼロで埋め込みます。 width 出力する値の最小フィールド幅を指示する整数。 precision フィールド値に使用する精度を指示する整数。 フィールド仕様の先頭文字は、フィールド値の位置合せを行うかどうか、または埋 込みを行うかどうかを指示します。先頭文字が負符号 (-) でもゼロ (0) でもない場 合、IBM Informix 製品は、そのフィールド値を右そろえ して出力し、値の左側を 空白で埋め込みます。 precision 値の意味は、次の表に示すとおり、その値を使用する特定のフォーマット ディレクティブにより異なります。 56 IBM Informix GLS: ユーザーズ ガイド フォーマット ディレクティブ 説明 %F、%H、 %I、%M、 %S %p %R、%T %F %Ox %c、%Ec、 %EX、%X precision の値は、出力する最小桁数を指定します。 precision が指定する桁 数よりも少ない桁数を値が指定した場合、IBM Informix 製品は先行ゼロで その値を埋め込みます。 %H、%M、および %S フォーマット ディレクテ ィブのデフォルトの精度は、2 です。 precision の値は、出力する最大文字数を指定します。 precision が指定する 文字数よりも多い文字数を値が指定した場合、IBM Informix 製品はその値 を切り捨てます。 width と precision の値は、これらのフォーマット ディレクティブのそれぞ れの要素に影響を与えます。たとえば、フィールド仕様 %6.4R の場合、日 時 (DATETIME) 型値はフォーマットが %6.4H:%6.4M であるかのように表 示されます。ここで、4 文字以上 (かつ 6 文字以下) の文字は時間と分を表 します。 precision の値を、オプションの精度仕様としてこのディレクティブの後に続 けることができます。この値は、1 から 5 の範囲の値にする必要がありま す。そうでない場合、IBM Informix 製品はエラーを生成します。この precision 値は、% 記号とフォーマット ディレクティブとの間に指定された precision 値を上書きします。 O 修飾子を含むフォーマット ディレクティブの場合、precision 値は、やは り、出力する最小桁数です。 width 値は、実際の桁数ではなく、フォーマッ トの幅を定義します。 width および precision の値は、これらのフォーマット ディレクティブには 影響を与えません。 たとえば、次のフォーマット ディレクティブは、分を、最大フィールド幅が 4 で ある整数として表示します。 %4M 次のフォーマット ディレクティブは、時間を、最初フィールド幅が 3 で、最大フ ィールド幅が 6 である整数として表示します。 %6.3H 指定されたフォーマットは、宣言された精度に関係なく、表示されるすべての日時 (DATETIME) 型値に適用されます。たとえば、GL_DATETIME の設定が 「%Y/%m/%d %H:%M:%S」である場合を考えます。この設定では、DATETIME YEAR TO SECOND 列からの値は、次のように表示されます。 [2000/08/28 14:43:17] また、プログラムが 2000 年の 8 月 28 日に実行された場合、同一の GL_DATETIME 設定で、DATETIME HOUR TO SECOND 列からの値も次のよう に表示されます。 [2000/08/28 14:43:17] GL_DATETIME を設定すると、データ型を宣言したときには DATETIME 修飾子に 含まれなかった時間単位が、フォーマットに含まれている場合でも、各日時 (DATETIME) 型値は、指定されたフォーマットで表示されます。宣言された精度外 の時間単位は、システム クロック カレンダから取得されます。予期しない結果を 第 2 章 GLS 環境変数 57 防ぐため、表示する日時 (DATETIME) 型と、GL_DATETIME の精度が同じである アプリケーションでは、GL_DATETIME のみを設定することが望ましい場合があり ます。 作成日時の設定値 DBCENTURY、DBDATE、および GL_DATE と同様に、GL_DATETIME 変数は、 リテラル時間値を含む式の評価方法に影響を与えることがあります。以前のいくつ かのリリースでは、環境変数をリセットすると、チェック制約、トリガ、フラグメ ント化式、UDR、および定義に時間式が含まれるその他のデータベース オブジェク トの動作が矛盾する場合あります。このリリースで作成されたオブジェクトは、実 行時の設定値ではなく、オブジェクト作成時に有効であった環境変数の設定値を使 用して (これらの設定値が異なる場合) 矛盾が発生しないようにします。 SERVER_LOCALE SERVER_LOCALE 環境変数は、サーバ ロケール を指定します。データベース サ ーバはこのサーバ ロケールを使用して、サーバ コンピュータ上のオペレーティン グ システム ファイルが関係する読取りおよび書込み操作を実行します。サーバ ロ ケールについて詳しくは、21 ページの『サーバ ロケール』と 103 ページの 『Informix データベース サーバによる GLS サポート』を参照してください。 SERVER_LOCALE language _ territory . code_set @modifier 要素 説明 code_set ロケールによりサポートされるコード セットの名前。 language 特定のロケールの言語を表す 2 文字の名前。 modifier 最大で 4 文字の英数字のオプションのロケール修飾子。 territory 文化上の慣習を表す 2 文字の名前。たとえば、territory は、スイス で話されるフランス語、ドイツ語、またはイタリア語を指定するこ とができます。 modifier を指定することにより、language および territory の設定値によって暗黙指 定される国/地域別情報の設定値が修正されます。通常、modifier は、ロケールによ りサポートされる特殊なタイプのローカライズ照合を指示します。たとえば、@ modifier を設定して辞書または電話帳の照合順序を指定できます フランス系カナダ ロケール用の非デフォルト サーバ ロケールの例は、次のとおり です。 SERVER_LOCALE fr_ca.8859-1 UNIX のみ glfiles ユーティリティを使用して、UNIX システム上で使用できる GLS ロケール のリストを生成できます。詳しくは、165 ページの『glfiles ユーティリティ (UNIX のみ)』を参照してください。 UNIX のみ の終り 58 IBM Informix GLS: ユーザーズ ガイド SERVER_LOCALE を設定しない場合、Informix データベース サーバはデフォル ト ロケールの米国英語 (U.S.English) をサーバ ロケールとして使用します。 Windows のみ SERVER_LOCALE への変更内容は、HKEY_LOCAL_MACHINE の下の Windows レジストリ データベースにも入力されます。 Windows のみ の終り 第 2 章 GLS 環境変数 59 60 IBM Informix GLS: ユーザーズ ガイド 第 3 章 SQL 機能 本章の概要 . . . . . . . . . . . . . . データベース オブジェクトの命名. . . . . . . 識別子のルール . . . . . . . . . . . . 識別子内の非 ASCII 文字 . . . . . . . . SQL 識別子の修飾子 . . . . . . . . . 所有者名 . . . . . . . . . . . . . パス名とファイル名 . . . . . . . . . 区切り識別子 . . . . . . . . . . . . 識別子内の有効な文字 . . . . . . . . . . 文字データ型の使用 . . . . . . . . . . . 文字データのローカライズ済み照合 . . . . . 各国語文字 (NCHAR) 型 . . . . . . . . 各国語可変長文字 (NVARCHAR) 型 . . . . パフォーマンスの考慮 . . . . . . . . . その他の文字データ型 . . . . . . . . . . 文字 (CHAR) 型 . . . . . . . . . . . 可変長文字 (VARCHAR) 型 . . . . . . . ラージ可変長文字 (LVARCHAR) 型 (IDS の み) . . . . . . . . . . . . . . . テキスト (TEXT) 型 . . . . . . . . . 文字データの処理 . . . . . . . . . . . . 引用符付き文字列の指定 . . . . . . . . . コメントの指定 . . . . . . . . . . . . 列サブ文字列の指定 . . . . . . . . . . シングルバイト コード セット内の列サブ文字 列 . . . . . . . . . . . . . . . マルチバイト コード セット内の列サブ文字列 列サブ文字列内の部分文字 . . . . . . . 部分文字に関するエラー . . . . . . . . ORDER BY 節内の部分文字 . . . . . . . 61 62 62 63 65 65 66 66 67 68 68 68 70 72 72 72 73 74 74 75 75 76 76 77 77 78 79 79 TRIM 関数への引数の指定 . . . . . . . . 81 大文字と小文字を区別しない検索関数の使用 (IDS のみ) . . . . . . . . . . . . . . . 81 文字データの照合 . . . . . . . . . . . 81 CREATE INDEX 内の照合順序 . . . . . . 82 CREATE INDEX 内の照合順序 . . . . . . 83 MATCHES および LIKE 条件での比較 . . . 87 SQL 長さ関数の使用 . . . . . . . . . . 90 LENGTH 関数 . . . . . . . . . . . 90 OCTET_LENGTH 関数. . . . . . . . . 92 CHAR_LENGTH 関数 . . . . . . . . . 94 ロケールを区別するデータ型の使用 . . . . . . 95 金額 (MONEY) 型の処理 . . . . . . . . . 95 scale (小数点以下桁数) パラメータ値の指定 . 96 通貨表記のフォーマット . . . . . . . . 97 拡張データ型の処理 (IDS のみ) . . . . . . 97 不透明 (opaque) 型 . . . . . . . . . . 97 複合データ型 . . . . . . . . . . . . 97 ディスティンクト (distinct) 型 . . . . . . 97 スマート ラージ オブジェクトの処理 (IDS のみ) 98 データ操作文の使用 . . . . . . . . . . . 98 WHERE 節内の条件の指定 . . . . . . . . 98 元号ベース日付の指定 . . . . . . . . . . 99 データのロードとアンロード . . . . . . . 99 データベースへのデータのロード . . . . . 99 データベースからのデータのアンロード . . 100 外部表を使用したロード (XPS のみ) . . . 101 外部表を使用したシンプル ラージ オブジェ クトのロード (XPS のみ) . . . . . . . 101 本章の概要 本章では、GLS 機能が SQL の Informix インプリメンテーションにどのような影 響を与えるかについて説明します。次に続く節で、ロケールの選択による以下のト ピックへの影響について説明します。 v データベース オブジェクトの命名 v 文字データ型の使用 v 文字データの処理 v ロケールを区別するデータ型の使用 v データ操作文の使用 SQL の Informix インプリメンテーションに関する 詳細については、 「IBM Informix: SQL ガイド: 構文」、 「IBM Informix: SQL ガイド: 参照」、 「IBM Informix: SQL ガイド: チュートリアル」、 および「IBM Informix: Database Design and Implementation Guide」を参照してください。 © Copyright IBM Corp. 1996, 2003 61 データベース オブジェクトの命名 CREATE TABLE、CREATE INDEX、および RENAME COLUMN などのデータ定 義言語 (DDL) 文を使用するときには、新しいデータベース オブジェクト (場合に よっては DB 領域などの記憶域オブジェクト) の名前を宣言する必要があります。 本節では、非デフォルト ロケールでデータベース オブジェクトの名前を宣言する 場合の考慮事項について説明します。特に、本節では、どの SQL 識別子および区 切り識別子に非 ASCII 文字を適用できるかについて説明します。 重要: 非デフォルト ロケールを使用するには、IBM Informix 製品のために、該当 するロケール環境変数を設定しなければなりません。詳しくは、23 ページの 『非デフォルト ロケールの設定』を参照してください。 識別子のルール SQL 識別子は、表、列、インデックス、またはビューなどのデータベース オブジ ェクトの名前を表す、文字、数字、およびアンダスコアで構成された文字列です。 非区切り SQL 識別子の先頭は、文字またはアンダスコア記号 ( _ ) でなければな りません。識別子内の先頭以外の文字には、文字、数字、アンダスコア、または (Dynamic Server の場合のみ) ドル記号 ( $ ) の組み合わせを使用できます。ただ し、区切り識別子にはデータベース ロケールのコード セット内の文字を使用でき ます。詳しくは、66 ページの『区切り識別子』を参照してください。 SQL キーワードを識別子として宣言すると、構文があいまいになったり予期しない 結果が引き起こされたりする可能性があります。補足説明については、 「IBM Informix: SQL ガイド: 構文」内の識別子に関するセグメントを参照してくだ さい。また、63 ページの『識別子内の非 ASCII 文字』と、67 ページの『識別子内 の有効な文字』も参照してください。 SQL 識別子には、Dynamic Server の場合は 128 バイトまで、Extended Parallel Server の場合は 18 バイトまで使用できます。識別子を宣言するときには、ご使用 のデータベース サーバのサイズ制限を超えないようにしてください。たとえば、次 の文はマルチバイト文字 8 文字のシノニム名を作成します。 CREATE SYNONYM A1A2A3B1B2C1C2C3D1D2E1E2F1F2G1G2H1H2 FOR A1A2B1B2 Extended Parallel Server 上の例で宣言されるシノニムは 18 バイトの長さ (2 バイトのマルチバイト文字が 6 文字と、3 バイトのマルチバイト文字が 2 文字) であり、Extended Parallel Server での識別子の最大長を超えません。しかし、次の CREATE SYNONYM 文は、この シノニム名の合計バイト数が 20 であるためにエラーを生成します。 CREATE SYNOMYM A1A2A3B1B2B3C1C2C3D1D2D3E1E2F1F2G1G2H1H2 FOR A1A2B1B2 この文は、シノニムに 3 バイト文字を 4 文字と 2 バイト文字を 4 文字指定して います。このシノニム名に文字は 8 文字しか含まれていませんが、シノニム名内の 合計バイト数は 20 バイトであり、これは識別子の最大長を超えています。 Extended Parallel Server の終り 62 IBM Informix GLS: ユーザーズ ガイド 識別子内の非 ASCII 文字 Informix データベース サーバは、列、接続、制約、データベース、インデックス、 ロール、SPL ルーチン、シーケンス、シノニム、表、トリガ、およびビューの名前 などの多くの SQL 識別子内の、データベース ロケールのコード セットからの非 ASCII (ワイド、8 ビット、およびマルチバイト) 文字をサポートしています。 Extended Parallel Server Extended Parallel Server では、次の識別子にはシングルバイト文字のみを使用しま す。 v DB スライス v ログスライス v コサーバ v コグループ 次の識別子には ASCII 英数字の 7 ビットの名前のみを使用します。 v チャンク名 v ファイル名 v メッセージ ログ ファイル名 v パス名 Extended Parallel Server の終り Dynamic Server Dynamic Server では、以下のデータベース サーバ名の作成または参照で、非 ASCII 文字 (8 ビットおよびマルチバイト文字) を使用できます。 v チャンク名 v メッセージ ログ ファイル名 v パス名 Dynamic Server の終り データベース サーバが非 ASCII 文字を含むファイル名を生成する能力に、次の制 限が影響を与えます。 v データベース サーバは、オペレーティング システムが 8 ビット透過であるかど うかを認識している必要があります。 v DB_LOCALE 設定によって指定されているコード セットが、これらの非 ASCII 文字をサポートしる必要があります。 コード セットがマルチバイト (または他の非 ASCII) 文字をサポートしている非デ フォルト ロケールのデータベースでは、64 ページの表 1 にリストされているとお りに、多くの SQL 識別子を宣言するときにそれらの非 ASCII 文字を使用できま す。 第 3 章 SQL 機能 63 次の表の「識別子の型」列には、SQL 識別子またはオペレーティング システム識 別子を持つことができるオブジェクトのさまざまなカテゴリがリストされていま す。「SQL セグメント」列には、識別子の構文が示されている、「IBM Informix: SQL ガイド: 構文」内のセグメントが表示されています。「コンテキスト例」列に は、その識別子を宣言または参照する可能性のある SQL 文がリストされていま す。 表 1. 非 ASCII 文字をサポートする SQL 識別子 識別子の型 SQL セグメント コンテキスト例 別名 型変換 (キャスト) (IDS のみ) 列名 接続名 識別子 表現式 SELECT CREATE CAST 識別子 引用符付き文字列 制約名 データベース オブジェク ト名 識別子 CREATE TABLE CONNECT 詳しくは、75 ページの『引用符付き文字列 の指定』を参照してください。 CREATE TABLE カーソル名 データベース名 ディスティンクト (distinct) 型名 (IDS のみ) ファイル名 関数名 (IDS のみ) ホスト変数 インデックス名 データベース オブジェク ト名 識別子 データ型 なし データベース オブジェク ト名 なし データベース ト名 不透明 (opaque) 型 識別子 名 (IDS のみ) データ型 演算子クラス名 データベース (IDS のみ) ト名 ルーチン名 (IDS の データベース み) ト名 ルーチン名 データベース ト名 ロール名 (IDS の 識別子 み) 行 (row) 型 (IDS 識別子 のみ) シーケンス名 (IDS データベース のみ) ト名 SQL 文識別子 識別子 SPL ルーチン名 64 IBM Informix GLS: ユーザーズ ガイド オブジェク DECLARE 詳しくは、134 ページの『非 ASCII 文字の 処理』を参照してください。 CREATE DATABASE CREATE DISTINCT LOAD CREATE FUNCTION FETCH 詳しくは、134 ページの『非 ASCII 文字の 処理』を参照してください。 CREATE INDEX CREATE OPAQUE TYPE オブジェク CREATE OPCLASS オブジェク CREATE FUNCTION オブジェク CREATE PROCEDURE CREATE ROLE CREATE ROW TYPE オブジェク データベース オブジェク ト名 CREATE SEQUENCE PREPARE (詳しくは、134 ページの『非 ASCII 文字の処理』を参照してください。) CREATE PROCEDURE 表 1. 非 ASCII 文字をサポートする SQL 識別子 (続き) 識別子の型 SQL セグメント コンテキスト例 SPL ルーチン変数 なし (言語によって異なる) データベース オブジェク ト名 データベース オブジェク ト名 データベース オブジェク ト名 データベース オブジェク ト名 データベース オブジェク ト名 CREATE PROCEDURE FROM シノニム 表名 トリガ相関名 トリガ名 ビュー名 CREATE SYNONYM CREATE TABLE CREATE TRIGGER CREATE TRIGGER CREATE VIEW SQL 識別子の修飾子 64 ページの表 1 の「SQL セグメント」列は、識別子の構文の説明がある 「IBM Informix: SQL ガイド: 構文」内のセグメントを参照しています。多くの場 合、完全な構文には他の識別子を使用できます。たとえば、「データベース オブジ ェクト名 (Database Object Name)」セグメントには、インデックス名の構文に、イ ンデックスの非修飾名だけでなく、データベース (database) 名、データベース サー バ (server) 名、および所有者 (owner) 名を使用できることが示されています。 データベース オブジェクトの単純非修飾名にマルチバイト文字を使用できるとして も、そのオブジェクトの完全修飾名 (database@server:owner.index など) 内の他の識 別子にマルチバイト文字を使用できるのは、その識別子も上記の表に示されている 場合のみであることに注意してください。この例では、完全修飾インデックス名内 の database 修飾子にはマルチバイト文字を使用できますが、インデックス (index) 名を修飾しているデータベース サーバ (server) の識別子にマルチバイト文字を使用 することはできません。 所有者名 所有者名 (owner name) は、データベース オブジェクトの作成に関連付けられたユ ーザ (または、実際のユーザのログイン名に対応しない、informix などの所有者 (owner) の場合は疑似ユーザ) の名前です。所有者名は、データベース オブジェク トの識別子を修飾します。一般的に、所有者はそのデータベース オブジェクトを修 正または削除できます。所有者名 (owner name) という用語のシノニムは認証識別 子 (authorization identifier) です。 米国規格協会 所有者名 (owner name) の ANSI 用語はスキーマ名 (schema name) です。 ANSI 標準準拠データベースでは、所有していないデータベース オブジェクトの識別子の 修飾子として所有者 (owner) 名を指定しなければなりません。 米国規格協会 の終り 第 3 章 SQL 機能 65 オペレーティング システムがユーザ名内での非 ASCII 文字の使用をサポートして いない限り、所有者名内のそれらの文字は有効ではありません。 UNIX のみ データベース サーバが UNIX システム上にある場合、所有者名修飾子はデフォル トで UNIX ログイン ID になります。ただし、UNIX の多くのバージョンでは、 UNIX ログイン ID 内でのマルチバイト文字の使用をサポートしていません。 警告: 所有者名内のマルチバイト文字の指定は、ご自身の責任で行ってください。 UNIX ログイン ID が所有者名との照合に使用された場合、照合が失敗する 可能性があります。 UNIX のみ の終り いくつかの東アジア ロケールでは、データベース オブジェクトを作成して明示的 に所有者を指定するときに、所有者名にマルチバイト文字を使用できます。たとえ ば、CREATE INDEX 文にインデックスの所有者を (一重引用符で囲んで) 指定する ときに、マルチバイト文字を含む所有者名を割り当てることができます。次の文 は、マルチバイトの所有者名を持つインデックスを宣言しています。この例では、 所有者名は 2 バイト文字 3 文字で構成されています。 CREATE INDEX ’A1A2B1B2C1C2’.myidx ON mytable (mycol) 上の例では、クライアント ロケールがマルチバイト コード セットをサポートし、 2 1 2 1 2 1A 、B B 、および C C がこのコード セットで有効な文字であることが想定され ています。 パス名とファイル名 有効なパス名とファイル名は、オペレーティング システムによって異なります。 134 ページの『非 ASCII 文字の処理』を参照してください。たとえば、ハードコー ディングされたパス名内にマルチバイト文字が存在すると、マルチバイト ファイル 名をサポートするオペレーティング システムにしかアプリケーションを移植できな くなります。 Extended Parallel Server Extended Parallel Server の場合、パス名またはファイル名内では ASCII 英数字の 7 ビット文字のみが有効になります。 Extended Parallel Server の終り 区切り識別子 区切り識別子は、二重引用符で囲まれた識別子です。 DELIMIDENT 環境変数が設 定されていると、データベース サーバは二重引用符 ( ″ ) で囲まれた文字列を区切 り識別子として解釈し、一重引用符 ( ’ ) で囲まれた文字列をデータ文字列として 解釈します。この一重引用符と二重引用符の解釈は、SQL の ANSI/ISO 標準に準拠 しています。 66 IBM Informix GLS: ユーザーズ ガイド 非デフォルト ロケールでは、多くの区切り識別子内に、現行コード セットで有効 な非 ASCII 文字を指定できます。区切り識別子内での非 ASCII 文字の使用は、同 じ識別子の区切り記号なしの形式に非 ASCII 文字を使用できる場合に可能です。 たとえば、64 ページの表 1 には、インデックス名の宣言に非 ASCII 文字を指定で きることが示されています。したがって、区切り記号なしのインデックス名、また は次の SQL 文にあるとおりに二重引用符で囲んで区切り識別子にしたインデック ス名に、非 ASCII 文字を使用できます。 CREATE INDEX "A1A2#B1B2" ON mytable (mycol) 区切り識別子の説明については、「IBM Informix: SQL ガイド: 構文」内の識別子に 関するセグメントを参照してください。 識別子内の有効な文字 SQL 識別子内の文字 (letter) にはロケールが定義するアルファクラス内の文字を使 用できます。アルファクラスには、英字として分類されているすべての文字がリス トされています。文字分類に関する詳細については、155 ページの『CTYPE カテゴ リ』を参照してください。デフォルト ロケールでは、コード セットの アルファク ラスに、a から z までおよび A から Z までの範囲の ASCII 文字が使用されてい ます。 SQL 識別子は、文字 が SQL 識別子内で有効な場合に、これらの ASCII 文字を使用できます。 非デフォルト ロケールでのロケールのアルファクラスにも、a から z までおよび A から Z までの範囲の ASCII 文字が使用されています。これには、ギリシャ文字 またはキリル文字などの非ラテン アルファベットの文字、あるいは漢字などの、非 ASCII 文字が使用される可能性もあります。たとえば、日本語 UJIS コード セット (日本語 UJIS ロケール内) のアルファクラスには、漢字文字が含まれています。 IBM Informix 製品が非デフォルト ロケールを使用するとき、SQL 識別子の構文内 で文字 が有効な場合に、SQL 識別子は非 ASCII 文字を使用できます。また、非 ASCII 文字が文字 として有効になるのは、この文字がロケールのアルファクラスに リストされている場合です。 次の例の SQL 文は、SQL 識別子内の文字として非 ASCII 文字を使用していま す。 CREATE DATABASE marché; CREATE TABLE équipement ( code NCHAR(6), description NVARCHAR(128,10), prix_courant MONEY(6,2) ); CREATE VIEW çà_va AS SELECT numéro, nom FROM abonnés; この例で、ユーザは、フランス語ロケール (fr_fr.8859-1 など) で、名前にフランス 語の文字が含まれる次のデータベース、表、およびビューを作成します。 v CREATE DATABASE 文はデータベースの識別子 marché を宣言しています。 これには、8 ビット文字 é が使用されています。 第 3 章 SQL 機能 67 v CREATE TABLE 文は、8 ビット文字 é を含む表の識別子 équipement と、列 の識別子 code、description、および prix_courant を宣言しています。 v CREATE VIEW 文は、ビューの識別子 çà_va を宣言しています。これには、8 ビット文字 ç および à が使用されています。 v CREATE VIEW 文内の SELECT 節は、識別子 numéro と nom を射影リスト 内の列として指定し、表の識別子 abonnés を FROM 節に指定しています。 numéro と abonnés の両方に 8 ビット文字 é が使用されています。 この例のすべての識別子は、フランス語ロケールで識別子を指定する場合のルール に準拠しています。これらの名前が有効であるためには、これらのフランス語の文 字がアルファクラスに使用されたコード セットを、データベース ロケールがサポ ートしていなければなりません。 SQL 文の識別子の構文と使用方法の詳細については、「IBM Informix: SQL ガイド: 構文」内の識別子に関するセグメントを参照してください。 文字データ型の使用 ロケールは、組込み SQL 文字データ型の照合に影響を与えます。 v ローカライズ済み照合を使用する文字型: 各国語文字 (NCHAR) 型と各国語可変 長文字 (NVARCHAR) 型 v 照合にコード セット順序を使用する文字型: – 文字 (CHAR) 型 Dynamic Server – ラージ可変長文字 (LVARCHAR) 型 Dynamic Server の終り – 可変長文字 (VARCHAR) 型 – テキスト (TEXT) 型 「IBM Informix: SQL ガイド: 参照」にこれらの型の説明があります。照合に関する 詳細については、9 ページの『コード セットの文字クラス』を参照してください。 文字データのローカライズ済み照合 次の節で説明するとおり、ロケールの選択は、各国語文字 (NCHAR) 型と各国語可 変長文字 (NVARCHAR) 型の照合順序に影響を与える可能性があります。 各国語文字 (NCHAR) 型 各国語文字 (NCHAR) 型は、文字データを、シングルバイトまたはマルチバイトの 文字、数字、およびデータベース ロケールのコード セットによってサポートされ るその他の文字で構成される文字列として固定長フィールドに保管します。各国語 文字 (NCHAR) 型の構文は次のとおりです。 (1) 68 データ型セグメント IBM Informix GLS: ユーザーズ ガイド NCHAR ( ( 1 ) size ) 注: 1 SQLS を参照してください。 要素 目的 size 列内のバイト数を指定します。各国語文字 (NCHAR) 型列の全長は 32,767 バイトを超えることはできません。 size を指定しなかった 場合、デフォルトは NCHAR(1) になります。 この列は固定長であるため、データベース サーバは、各国語文字 (NCHAR) 型値を 抽出または送信するときに、厳密に size バイトのデータを転送します。文字列の長 さが size よりも短い場合、データベース サーバは空白を補って size バイトまで文 字列を拡張します。文字列が size バイトよりも長い場合、データベース サーバは 文字列を切り捨てます。 各国語文字 (NCHAR) 型データの照合: 各国語文字 (NCHAR) 型はロケールを区 別するデータ型です。各国語文字 (NCHAR) 型と文字 (CHAR) 型は、照合順序のみ が異なります。データベース サーバは、ロケールがローカライズ済み順序を定義し ている場合、各国語文字 (NCHAR) 型列内のデータをローカライズ済み順序でソー トします。 (多くの操作で、データベース サーバは、ロケールがローカライズ済み 照合を定義していても、文字 (CHAR) 型列内のデータをコード セット順序で照合 します。) ヒント: デフォルト ロケール (米国英語 (U.S. English)) は、ローカライズ済み順序 を指定していません。このため、データベース サーバは各国語文字 (NCHAR) 型データをこのロケールのコード セット順序でソートします。 デフォルト ロケールを使用するときには、文字 (CHAR) 型データと各国 語文字 (NCHAR) 型データには違いがありません。 各国語文字 (NCHAR) 型データの処理: クライアント アプリケーションは、各国 語文字 (NCHAR) 型データをクライアント システムの CLIENT_LOCALE 設定を 使用して取り扱います。 CLIENT_LOCALE が DB_LOCALE と異なり、DBNLS が 1 に設定されている場合、クライアント アプリケーションは各国語文字 (NCHAR) 型データのコード セット変換を自動的に実行します。 各国語型 (NCHAR) でのマルチバイト文字: マルチバイト文字データを各国語文字 (NCHAR) 型列に保管するには、データベース ロケールが、同じマルチバイト文字 を含むコード セットをサポートしている必要があります。マルチバイト文字を保管 するときには、必要なバイト数を必ず計算してください。各国語文字 (NCHAR) 型 のサイズ (size) パラメータが参照しているのはデータ用に予約されている記憶域の バイト数であり、論理的文字数ではありません。 1 つのマルチバイト文字は保管にいくつかのバイトを必要とするため、size バイト の値は列が保持できる文字の数を示していません。列に保管できるマルチバイト文 字の合計数は、列に保管できる合計バイト数よりも少なくなります。各国語文字 (NCHAR) 型列の size 値を、必要な数の文字を保持できる値として宣言してくださ い。 各国語文字 (NCHAR) 型値の数値としての処理: 列に保管されている数値に対して 計算を行う場合は、数値データ型 (整数 (INTEGER) 型または実数 (FLOAT) 型な ど) をその列に割り当てます。「IBM Informix: SQL ガイド: 参照」内の文字 第 3 章 SQL 機能 69 (CHAR) 型に関する説明に、ある数値を文字 (CHAR) 型値内に保管してはならない 理由が詳しく示されています。同じ理由が、各国語文字 (NCHAR) 型値としてのあ る数値にも当てはまります。先行ゼロを持つ数値 (郵便番号など) のみを各国語文字 (NCHAR) 型として処理してください。各国語文字 (NCHAR) 型は、数値をローカ ライズ済み順序でソートする必要がある場合にのみ使用します。 各国語文字 (NCHAR) 型での印刷不可能文字: 各国語文字 (NCHAR) 型値には、 タブ、空白、およびその他の空白と印刷不可能文字を使用できます。印刷不可能各 国語文字 (NCHAR) 型値および文字 (CHAR) 型値は、同じように入力、表示、およ び処理されます。 各国語可変長文字 (NVARCHAR) 型 各国語可変長文字 (NVARCHAR) 型は、文字データを可変長フィールドに保管しま す。データには、データベース ロケールのコード セットによってサポートされ る、シングルバイトまたはマルチバイトの文字、数字、およびその他の文字で構成 される文字列を指定できます。 各国語可変長文字 (NVARCHAR) 型の構文は次のとおりです。 (1) データ型セグメント NVARCHAR ( max , , 0 reserve ) 注: 1 SQLS を参照してください。 要素 目的 max 列に保管できるバイトの最大数を指定します。 reserve 列に保管できるバイトの最少数を指定します。 各国語可変長文字 (NVARCHAR) 型列の max を指定する必要があります。このパ ラメータに 255 バイトを超えるサイズを指定することはできません。 各国語可変長文字 (NVARCHAR) 型列にインデックスを配置するときの最大サイズ は 254 バイトになります。指定した値よりも短い文字列を保管することはできます が、指定した値よりも長い文字列を保管することはできません。 reserve パラメータは、ほとんどまたは全く文字のないデータ値を持つ行を最初にこ の列に挿入するが、後でそのデータがより長い値で更新されることが予期されると きに指定します。この値には 0 バイトから 255 バイトまでの値を使用できます が、値は各国語可変長文字 (NVARCHAR) 型列の max サイズよりも小さくなけれ ばなりません。最小領域値を指定しない場合、reserve のデフォルト値は 0 になり ます。 各国語可変長文字 (NVARCHAR) 型を使用すると表に使用される領域が節約されま すが、インデックスのサイズには影響がありません。各国語可変長文字 (NVARCHAR) 型列を基にしたインデックスでは、各インデックス キーの長さは列 の最大サイズである max バイトと同じ長さになります。 データベース サーバは、各国語可変長文字 (NVARCHAR) 型オブジェクトから、ユ ーザが入力した後書きの空白を取り除かず、各国語可変長文字 (NVARCHAR) 型オ ブジェクトを列の最大長にパッドしたりもしません。ただし、最小予約領域 70 IBM Informix GLS: ユーザーズ ガイド (reserve) が指定されており、いくつかのデータ値がその長さよりも短い場合、行の ために予約された領域の一部は使用されないままになります。 各国語可変長文字 (NVARCHAR) 型データの照合: 各国語可変長文字 (NVARCHAR) 型はロケールを区別するデータ型です。各国語可変長文字 (NVARCHAR) 型と可変長文字 (VARCHAR) 型は、照合順序のみが異なります。デ ータベース サーバは、ロケールがローカライズ済み順序を定義している場合、各国 語可変長文字 (NVARCHAR) 型列内のデータをローカライズ済み順序で照合しま す。多くの操作で、データベース サーバは文字 (CHAR) 型列内のデータをコード セット順序で照合します。 ヒント: デフォルト ロケール (米国英語 (U.S. English)) は、ローカライズ済み順序 を指定していません。このため、データベース サーバは各国語可変長文字 (NVARCHAR) 型データをコード セット順序でソートします。デフォルト ロケールを使用するときには、可変長文字 (VARCHAR) 型データと各国語 可変長文字 (NVARCHAR) 型データには違いがありません。 各国語可変長文字 (NVARCHAR) 型データの処理: クライアント アプリケーショ ンの内部では、各国語可変長文字 (NVARCHAR) 型データを常にそのクライアント アプリケーションの CLIENT_LOCALE で操作します。 CLIENT_LOCALE が DB_LOCALE と異なる場合、クライアント アプリケーションは各国語可変長文字 (NVARCHAR) 型データのコード セット変換を自動的に実行します。 (コード セッ ト変換に関する詳細については、30 ページの『コード セット変換の実行』を参照 してください。) 各国語可変長文字 (NVARCHAR) 型のマルチバイト文字: マルチバイト文字データ を各国語可変長文字 (NVARCHAR) 型列に保管するには、同じマルチバイト文字を 持つコード セットをデータベース ロケールがサポートしている必要があります。 マルチバイト文字を保管するときには、必要なバイト数を必ず計算してください。 各国語可変長文字 (NVARCHAR) 型の max パラメータは、列に保管できるバイト の最大数を参照します。 1 つのマルチバイト文字は保管にいくつかのバイトを使用するため、max バイトの 値は列が保持できる論理的文字数を示していません。列に保管できるマルチバイト 文字の合計数は、列に保管できる合計バイト数よりも少なくなります。各国語可変 長文字 (NVARCHAR) 型列の max 値を、必要なマルチバイト文字を保持できる値 として宣言してください。 各国語可変長文字 (NVARCHAR) 型での印刷不可能文字: 各国語可変長文字 (NVARCHAR) 型値には、タブ、空白、および印刷不可能文字を使用できます。印刷 不可能各国語可変長文字 (NVARCHAR) 型文字は、印刷不可能可変長文字 (VARCHAR) 型文字と同じ方法で入力、表示、および処理されます。 ヒント: データベース サーバは、NULL 文字 (ASCII 0) を C NULL 終端子として 解釈します。各国語可変長文字 (NVARCHAR) 型データでは、NULL 終端 子は文字列終端記号文字として機能します。 各国語可変長文字 (NVARCHAR) 型列への数値の保管: データベース サーバが、 各国語可変長文字 (NVARCHAR) 型列内の数値を、後続の空白文字を使用して列の 最大長までパッドすることはありません。数値の各国語可変長文字 (NVARCHAR) 第 3 章 SQL 機能 71 型値の桁数は、その値を保管するために必要な文字数になります。たとえば、デー タベース サーバは、次の SQL 文を実行するときに値 1 を mytab 表に保管しま す。 CREATE TABLE mytab (col1 NVARCHAR(10)); INSERT INTO mytab VALUES (1); パフォーマンスの考慮 各国語文字 (NCHAR) 型は文字 (CHAR) 型に似ており、各国語可変長文字 (NVARCHAR) 型は可変長文字 (VARCHAR) 型に似ています。これらのデータ型は 以下の 2 つの点で異なっています。 v データベース サーバは各国語文字 (NCHAR) 型列値と各国語可変長文字 (NVARCHAR) 型列値をローカライズ済み順序で照合します。 v データベース サーバは文字 (CHAR) 型列値と可変長文字 (VARCHAR) 型列値を コード セット順序で照合します。 ローカライズ済み照合は、単にコンピュータによる文字表記 (コード ポイント) に 基づくだけでなく、ロケールが定義するソート ルールに基づいて行われます。この 違いは、データベース サーバが各国語文字 (NCHAR) 型データと各国語可変長文字 (NVARCHAR) 型データの比較と照合で複雑な処理を行う可能性があることを意味し ています。このため、各国語文字 (NCHAR) 型データへのアクセスは、比較と照合 に関する限り、文字 (CHAR) 型データへのアクセスよりも遅くなる可能性がありま す。同様に、各国語可変長文字 (NVARCHAR) 型列内のデータへのアクセスは、比 較と照合に関する限り、可変長文字 (VARCHAR) 型列内の同じデータへのアクセス よりも遅くなる可能性があります。 文字データの照合と比較でローカライズ済み順序を利用する必要があるかどうかを 査定してください。コード セット順序で十分な場合は、文字 (CHAR) 型、ラージ 可変長文字 (LVARCHAR) 型、および可変長文字 (VARCHAR) 型を使用してくださ い。 その他の文字データ型 ロケールの選択は以下の文字データ型に影響を与える可能性があります。これにつ いて、続く節で個別に説明します。 v 文字 (CHAR) 型 v 可変長文字 (VARCHAR) 型 Dynamic Server v ラージ可変長文字 (LVARCHAR) 型 Dynamic Server の終り v テキスト (TEXT) 型 文字 (CHAR) 型 文字 (CHAR) 型は、文字データを固定長フィールドに保管します。データには、デ ータベース ロケールのコード セットによってサポートされる、シングルバイトま たはマルチバイトの文字、数字、およびその他の文字で構成される文字列を指定で きます。 72 IBM Informix GLS: ユーザーズ ガイド 次のリストに、ロケールの選択による文字 (CHAR) 型への影響の要約を示します。 v 文字 (CHAR) 型列のサイズはバイト ベースであり、文字ベースではありませ ん。 たとえば、文字 (CHAR) 型列を CHAR(10) と定義した場合、列は 10 バイトの 固定長になり、10 文字の固定長にはなりません。マルチバイト文字を文字 (CHAR) 型列に保管したい場合、列に保管できる文字の合計数が列に保管できる バイトの合計数よりも少なくなる可能性があることに注意してください。文字 (CHAR) 型列のバイト サイズを、必要な数の文字を保持できる値として定義して ください。 v 文字 (CHAR) 型列にはシングルバイトまたはマルチバイトの文字を入力できま す。 文字 (CHAR) 型列に保管したい文字をデータベース ロケールがサポートしてい る必要があります。 v データベース サーバは文字 (CHAR) 型列をローカライズ済み順序ではなくコー ド セット順序でソートします。 v クライアント アプリケーションの内部では、文字 (CHAR) 型データを常にその クライアント アプリケーションの CLIENT_LOCALE で操作します。 CLIENT_LOCALE が DB_LOCALE と異なる場合、クライアント アプリケーシ ョンは文字 (CHAR) 型データのコード セット変換を自動的に実行します。 可変長文字 (VARCHAR) 型 可変長文字 (VARCHAR) 型は、255 バイトまでの文字列を可変長フィールドに保管 します。データは、文字、数字、および記号で構成することができます。可変長文 字 (CHARACTER VARYING) 型は、可変長文字 (VARCHAR) 型と全く同じ方法で 処理されます。次のリストに、ロケールの選択による可変長文字 (VARCHAR) 型へ の影響の要約を示します。 v 可変長文字 (VARCHAR) 型列の最大サイズと最小予約領域はバイト ベースであ り、文字ベースではありません。 たとえば、可変長文字 (VARCHAR) 型列を VARCHAR(10,6) と定義した場合、 列の最大長は 10 バイト、最小予約領域は 6 バイトになります。マルチバイト文 字を可変長文字 (VARCHAR) 型列に保管したい場合、列に保管できる文字の合計 数が列に保管できるバイトの合計数よりも少なくなる可能性があることに注意し てください。可変長文字 (VARCHAR) 型列の最大バイト サイズを、必要な数の 文字を保持できる値として定義してください。 v 可変長文字 (VARCHAR) 型列にはシングルバイトまたはマルチバイトの文字を入 力できます。 可変長文字 (VARCHAR) 型列に保管したい文字をデータベース ロケールがサポ ートしている必要があります。 v データベース サーバは可変長文字 (VARCHAR) 型列をローカライズ済み順序で はなくコード セット順序でソートします。 v クライアント アプリケーションの内部では、可変長文字 (VARCHAR) 型データ を常にそのクライアント アプリケーションの CLIENT_LOCALE で操作しま す。 第 3 章 SQL 機能 73 CLIENT_LOCALE が DB_LOCALE と異なる場合、クライアント アプリケーシ ョンは可変長文字 (VARCHAR) 型データのコード セット変換を自動的に実行し ます。 ラージ可変長文字 (LVARCHAR) 型 (IDS のみ) ラージ可変長文字 (LVARCHAR) 型は、32,739 バイトまでの文字列を可変長フィー ルドに保管できます。宣言に最大サイズ (maximum size) を指定しない場合、デフォ ルトのサイズ上限は 2048 バイトになります。データ値には、文字、数字、記号、 空白、および印刷不可能文字を使用できます。 ラージ可変長文字 (LVARCHAR) 型は、以下の点で可変長文字 (VARCHAR) 型に似 ています。 v ラージ可変長文字 (LVARCHAR) 型の文字列は、コード セット順序で照合されま す。 v クライアント アプリケーションは、ラージ可変長文字 (LVARCHAR) 型データに 対してコード セット変換を実行します。 v ラージ可変長文字 (LVARCHAR) 型は、組込み SQL 長さ関数をサポートしま す。 (90 ページの『SQL 長さ関数の使用』を参照してください。) v ラージ可変長文字 (LVARCHAR) 型宣言は、最大サイズ (maximum size) を指定で きます。 ただし、可変長文字 (VARCHAR) 型と異なり、ラージ可変長文字 (LVARCHAR) 型 には予約サイズ (reserved size) パラメータが存在せず、ラージ可変長文字 (LVARCHAR) 型列内のデータ文字列は可変長文字 (VARCHAR) 型の上限である 255 バイトよりも長い値にすることが可能です。 データベース サーバは、ラージ可変長文字 (LVARCHAR) 型を、不透明 (opaque) 型の外部フォーマットを表すためにも使用します。データベース サーバの入出力 (I/O) 操作では、ラージ可変長文字 (LVARCHAR) 型データ値のサイズには、ファイ ル サイズ制限か、オペレーティング システムまたはハードウェア リソースの制限 以外には、上限がありません。 テキスト (TEXT) 型 テキスト (TEXT) 型は、どの種類のテキスト データも保管します。一般的に、テキ スト (TEXT) 型列には、メモ、マニュアルの章、ビジネス ドキュメント、プログラ ム ソース ファイル、およびその他の型のテキスト情報を保管します。次のリスト に、ロケールの選択によるテキスト (TEXT) 型への影響の要約を示します。 v データベース サーバは、テキスト (TEXT) 型列の文字列データを、データベー ス ロケールのコード セットで保管します。 v テキスト (TEXT) 型列にはシングルバイトまたはマルチバイトの文字を入力でき ます。 テキスト (TEXT) 型列に保管したい文字をデータベース ロケールがサポートし ている必要があります。ただし、テキスト (TEXT) 型列にはどの型の文字も書き 込むことができます。 v テキスト (text) 型列には、関連付けられた照合順序がありません。 データベース サーバは、テキスト (TEXT) 型列に対するインデックスを作成し ません。このため、これらの列に対する照合タスクは実行されません。 74 IBM Informix GLS: ユーザーズ ガイド v クライアント アプリケーションの内部では、テキスト (TEXT) 型データを常に そのクライアント アプリケーションの CLIENT_LOCALE で操作します。 CLIENT_LOCALE が DB_LOCALE と異なる場合、クライアント アプリケーシ ョンはテキスト (TEXT) 型データのコード セット変換を自動的に実行します。 文字データの処理 GLS 機能では、非 ASCII 文字 (マルチバイト文字を含む) を SQL 文の以下の要素 内に書き込むことができます。 v 引用符付き文字列 v コメント v 列サブ文字列 v TRIM 関数引数 Dynamic Server v UPPER、LOWER、および INITCAP 関数引数 Dynamic Server の終り 引用符付き文字列の指定 引用符付き文字列は、さまざまな SQL 文、特に SELECT および INSERT などの データ操作文で使用されます。引用符付き文字列は、引用符で区切られた、連続し た文字の列です。引用符には一重引用符または二重引用符を使用できます。ただ し、DELIMIDENT 環境変数が設定されている場合、データベース サーバは二重引 用符で囲まれた文字列を、文字列としてではなく区切り識別子として解釈します。 区切り識別子に関する詳細については、63 ページの『識別子内の非 ASCII 文字』 を参照してください。 非デフォルト ロケールを使用するときには、引用符付き文字列に、ロケールのコー ド セット内のどの文字も使用できます。ロケールが非 ASCII 文字を含むコード セ ットをサポートしている場合、引用符付き文字列にそれらの文字を使用できます。 次の例で、ユーザは表 mytable に、マルチバイト文字を含む列値を挿入します。 INSERT INTO mytable VALUES (’A1A2B1B2abcd’, ’123X1X2Y1Y2’, ’efgh’) この例では、最初の引用符付き文字列にマルチバイト文字 A1A2 と B1B2 が使用さ れています。 2 番目の引用符付き文字列には、マルチバイト文字 X1X2 と Y1Y2 が使用されています。 3 番目の引用符付き文字列にはシングルバイト文字しか含ま れていません。この例では、A1A2、B1B2、X1X2、Y1Y2 という文字を持つマルチバ イト コード セットがロケールでサポートされていることが想定されています。 引用符付き文字列の説明については、「IBM Informix: SQL ガイド: 構文」の引用符 付き文字列に関するセグメントを参照してください。 第 3 章 SQL 機能 75 コメントの指定 SQL 文の後にコメントを使用するには、コメント テキストの前に以下のコメント 標識変数のいずれかを置きます。 米国規格協会 v 2 つのハイフン (--) ANSI SQL 標準に準拠しています。 米国規格協会 の終り Informix SQL 拡張 v ブレース ( { } ) は ANSI 標準に対する Informix の拡張機能です。 Informix SQL 拡張 の終り 非デフォルト ロケールでは、コメントに、ロケールのコード セット内のどの文字 も使用できます。ロケールが非 ASCII 文字を含むコード セットをサポートしてい る場合、SQL コメントにそれらの文字を使用できます。 次の例で、ユーザは表 mytable に、マルチバイト文字を含む列値を挿入します。 EXEC SQL insert into mytable values (’A1A2B1B2abcd’, ’123’) -- A1A2 and B1B2 are multibyte characters. この例では、SQL コメントにマルチバイト文字 A1A2 と B1B2 が使用されていま す。この例では、A1A2 と B1B2 という文字を含むマルチバイト コード セットをロ ケールがサポートしていることが想定されています。 SQL コメントとコメント標 識変数の詳細については、「IBM Informix: SQL ガイド: 構文」を参照してくださ い。 列サブ文字列の指定 問合せ内 (または埋込み SELECT 文を含む SQL 文内) で、ブラケット { [ ] } を 使用して、文字データ型列内のデータのサブセットのみを抽出することを指定でき ます。列内のデータのサブセットを示すためにブラケットが使用された列式は、列 サブ文字列 と呼ばれます。列サブ文字列の構文は次のとおりです。 (1) 式セグメント column [ first , last ] 注: 1 76 SQLS を参照してください。 要素 目的 column データベース表またはビュー内の列の識別子 first, last 抽出されるサブ文字列のそれぞれ最初と最後のバイトの位置 IBM Informix GLS: ユーザーズ ガイド シングルバイト コード セット内の列サブ文字列 customer 表から、customer_num 列と、lname 列の 7 バイト目から 9 バイト 目までを抽出したいとします。この問合せを実行するには、以下のとおりに、 SELECT 文内で lname 列の列サブ文字列を使用します。 SELECT customer_num, lname[7,9] as lname_subset FROM customer WHERE lname = ’Albertson’ lname 列値が Albertson である場合、問合せは次の結果を戻します。 customer_num lname_subset 114 son ロケールがシングルバイト コード セットをサポートしているため、上記の問合せ は名前 Albertson の 7 番目から 9 番目までの文字を戻しているように見えます。 しかし、列サブ文字列はバイト ベースであり、問合せは名前の 7 番目から 9 番目 までのバイト を戻しています。 1 バイトは シングルバイト コード セットでの 1 文字と同じであるため、これらのコード セットでは列サブ文字列内の文字とバイト の区別は明確ではありません。 マルチバイト コード セット内の列サブ文字列 マルチバイト コード セットの場合、列サブ文字列は指定された数の文字ではなく 指定された数のバイトを戻します。文字型列 multi_col に 2 バイト文字 3 文字の 文字列が含まれている場合、この 6 バイトの文字列を次のように表すことができま す。 A1A2B1B2C1C2 問合せが、multi_col 列から次のサブ文字列を指定したとします。 multi_col[1,2] 問合せは次の結果を戻します。 A1A2 戻されたサブ文字列は 2 文字ではなく 2 バイト (1 文字) で構成されます。 multi_col 列から最初の 2 文字を抽出するには、first が先頭文字の先頭バイトの位 置であり、last が 2 番目の文字の最後のバイトの位置であるサブ文字列を指定して ください。 6 バイト文字列 A1A2B1B2C1C2 の場合、次の表現式が問合せでサブ文 字列を指定します。 multi_col[1,4] 次の結果が戻されます。 A1A2B1B2 問合せが戻すサブ文字列は、列値の最初の 4 バイトで構成されています。これは、 列内の最初の論理的文字 2 文字を表しています。 第 3 章 SQL 機能 77 列サブ文字列内の部分文字 マルチバイト文字は、2、3、または 4 バイトで構成される可能性があります。 1 つ以上のバイトを失い、そのために最初に意図された文字の意味を失ったマルチバ イト文字は、部分文字 と呼ばれます。 予防しない限り、列サブ文字列によって、マルチバイト文字が切り捨てられるか、 分解されてバイトのオリジナル シーケンスが保存されなくなることがあります。部 分文字は、マルチバイト文字を含む列に対して列サブスクリプト演算子を使用した ときに発生する可能性があります。ユーザが multi_col 列に次の列サブ文字列を指 定し、multi_col 内の文字列の値が A1A2B1B2C1C2 であるとします。 multi_col[2,5] ユーザは問合せでバイト A2B1B2C1 を要求しています。しかし、データベース サー バがユーザにこの列サブ文字列を戻した場合、列の先頭と 3 番目の論理的文字は切 り捨てられます。 マルチバイト コード セットでの回避: Informix データベース サーバは部分文字 の発生を許容しません。 GLS 機能によって、指定されたバイト範囲に部分文字が 含まれると、データベース サーバはこの範囲をそのまま戻すことができなくなりま す。データベース ロケールがマルチバイト コード セットをサポートしており、問 合せで特定の列サブ文字列を指定した場合、データベース サーバは切り捨てられた マルチバイト文字をシングルバイトの空白文字列で置き換えます。 たとえば、multi_col 列に文字 A1A2A3A4B1B2B3B4 が含まれており、次の SELECT 文を実行するとします。 SELECT multi_col FROM tablename WHERE multi_col[2,4] = ’A8A2B1B2’ データベース サーバがサブ文字列 multi_col[2,4] (つまり文字列 A2A3A4) を 3 つ のシングルバイトの空白 (sss) に変換するために、問合せは行を戻しません。 WHERE 節は次の検索条件を指定します。 WHERE ’sss’ = ’A1A2A3’ この条件は真にならないため、問合せはマッチングする行を抽出しません。 Informix データベース サーバは、個々のサブ文字列操作で部分文字を (それらが連 結されている場合にも) 置き換えます。 たとえば、multi_col 列に A1A2B1B2C1C2D1D2 が含まれ、WHERE 節に次の条件が 含まれるとします。 multi_col[2,4] | multi_col[6,8] 連結の結果 (A2B1B2C2D1D2) には 2 つの部分文字 A2 と C2 が含まれるため、問合 せは行を戻しません。 Informix データベース サーバはこれらの部分文字をシング ルバイトの空白に変換して、次の WHERE 節条件を作成します。 WHERE ’sB1B2sD1D2’ = ’A1A2B1B2’ この条件も真にならないため、問合せはマッチングする行を抽出しません。 78 IBM Informix GLS: ユーザーズ ガイド 部分文字に関するエラー サブ文字列の連結によるオリジナルの論理的文字列の再構成を妨げる可能性のある 方法でサブ文字列が処理されるかユーザに表示される可能性がある場合、部分文字 が関係モデルに違反します。 これは、マルチバイト文字に、それ自体が有効な文字であるサブ文字列が含まれる ときに発生します。たとえば、マルチバイト コード セットに、数字 1 を表す 4 バイト文字 A1A2A3A4 と、数字 6 を表す 3 バイト文字 A2A3A4 が含まれるとしま す。さらに、次の問合せを実行するときにロケールがこのマルチバイト コード セ ットを使用しているとします。 SELECT multi_col FROM tablename WHERE multi_col[2,4] = ’A2A3A4’ データベース サーバは multi_col[2,4] を有効な 4 バイト文字のサブ文字列 (’sss’) ではなく、有効な 3 バイト文字 (マルチバイトの 6) として解釈します。 このため、WHERE 節は次の条件を含みます。 WHERE ’6’ = ’6’ シングルバイト コード セットでは、それぞれの文字がそれぞれシングルバイトに 保管されるため、部分文字は発生しません。データベース ロケールがシングルバイ ト コード セットをサポートしており、問合せ内に列サブ文字列を指定した場合、 問合せは要求されたデータ サブセットを正確に戻します。文字は空白で置き換えら れません。 ORDER BY 節内の部分文字 部分文字は、SELECT 文の ORDER BY 節内に列サブ文字列を指定するときに問題 の原因となる可能性があります。 ORDER BY 節に列サブ文字列を指定するための構文は次のとおりです。 (1) SELECT 文 ORDER BY column [ first , last ] 注: 1 SQLS を参照してください。 要素 目的 column 指定された表またはビュー内の列の名前。 first, last サブ文字列のそれぞれ最初と最後のバイトの位置 問合せ結果はこの列に含まれる値によってソートされます。 Extended Parallel Server ORDER BY 節に指定された列または表現式は、射影節の SELECT リストに明示的 または暗黙的にリストされなければなりません。 Extended Parallel Server の終り 第 3 章 SQL 機能 79 すべての文字が同じ長さであるマルチバイト コード セットをロケールがサポート している場合、ORDER BY 節内で列サブ文字列を使用できます。ただし、より標準 的なシナリオでは、マルチバイト コード セットにさまざまな長さの文字が含まれ ます。この場合、列サブ文字列を ORDER BY 節に 指定することが有益ではない可 能性があります。 たとえば、次の問合せを使用して、multi_data 表のすべての行を抽出し、その結果 を multi_chars 列の 4 番目から 6 番目までの文字として定義されたサブ文字列に 従ってソートしたいとします。 SELECT * FROM multi_data ORDER BY multi_chars[7,12] 文字がすべて 2 バイトの長さであるマルチバイト コード セットをロケールがサポ ートしている場合、列内の 4 番目の文字はバイト位置 7 から始まり、列内の 6 番 目の文字はバイト位置 12 で終わることが分かります。上記の SELECT 文は部分文 字を生成しません。 しかし、マルチバイト コード セットにシングルバイト文字、2 バイト文字、およ び 3 バイト文字が混合して含まれている場合は、サブ文字列 multi_chars[7,12] は 部分文字を作成する可能性があります。この場合、ORDER BY 節に列サブ文字列を 指定すると予期しない結果を得る可能性があります。 ORDER BY 節内のさまざまな型の文字データの照合に関する詳細については、83 ページの『ORDER BY 節』を参照してください。 ORDER BY 節の構文と使用方 法の詳細については、「IBM Informix: SQL ガイド: 構文」内の SELECT 文に関す る説明を参照してください。 ヒント: 部分文字は、SQL API がマルチバイト データをあるバッファから別のバ ッファにコピーするときにも生成される可能性があります。詳しくは、135 ページの『非 ASCII ファイル名の生成』を参照してください。 テキスト (TEXT) 型およびバイト (BYTE) 型列での回避: 部分文字はテキスト (TEXT) 型またはバイト (BYTE) 型の列の列サブ文字列を指定するときには問題に はなりません。データベース サーバは、次の方法でテキスト (TEXT) 型およびバイ ト (BYTE) 型列内の部分文字を回避します。 v データベース サーバはバイト (BYTE) 型列を一連の文字ではなく一連のバイト として解釈するため、列サブ文字列が指定するバイト範囲の結果としてのマルチ バイト文字の分割は問題にはなりません。 バイト (BYTE) 型列のサブ文字列は、指定されたバイト範囲を正確に戻し、バイ トを空白文字で置き換えません。 v データベース サーバはテキスト (TEXT) 型値を文字列として解釈します。 テキスト (TEXT) 型列からのサブ文字列は、指定されたバイト範囲を正確に戻し ます。テキスト (TEXT) 型データ内の部分文字を解決しようとする試みはリソー スを消耗しますが、データベース サーバはバイトを空白に置き換えません。詳し くは、74 ページの『テキスト (TEXT) 型』を参照してください。 警告: テキスト (TEXT) 型データとバイト (BYTE) 型データの処理と解釈はクライ アント アプリケーションの責任で行われます。クライアント アプリケーシ ョンは、それらの操作で部分文字が発生する可能性に対処しなければなりま せん。 80 IBM Informix GLS: ユーザーズ ガイド TRIM 関数への引数の指定 TRIM 関数は、先行または後書きの埋込み文字を文字列から除去する組込み SQL 関数です。デフォルトでは、この埋込み文字は ASCII 32 (空白) です。別の空白文 字を定義しているコード セットをロケールがサポートしている場合、TRIM はこの ロケール固有の空白を文字列の最初または最後から除去しません。 TRIM に LEADING、TRAILING、または BOTH キーワードを指定する場合、別の埋込み文 字を指定できます。 ただし、非 ASCII 文字を定義しているコード セットをロケールがサポートしてい るとしても、非 ASCII 文字を埋込み文字として指定することはできません。 Dynamic Server ラージ可変長文字 (LVARCHAR) 型は TRIM 関数に対する引数として有効ではあり ません。 Dynamic Server の終り 大文字と小文字を区別しない検索関数の使用 (IDS のみ) SQL 検索関数 UPPER、LOWER、および INITCAP は、GLS をサポートします。 それらは文字型ソース文字列内のマルチバイト文字を受け入れ、操作します。戻さ れたデータ型はソース文字列の型と同じになります。 v UPPER は文字列内のすべての文字を大文字に変換します。 v LOWER は文字列内のすべての文字を小文字に変換します。 v INITCAP は単語または一連の単語の最初の文字を大文字にします。 これらの検索関数に関する詳細については、「IBM Informix: SQL ガイド: 構文」を 参照してください。 文字データの照合 照合は、文字データ型を持つ列内のデータ値をソートするプロセスです。照合順序 に関する説明と、文字データをソートするための 2 つのメソッド (コード セット 順序とローカライズ済み順序) に関する議論については、9 ページの『コード セッ トの文字クラス』を参照してください。 デフォルトでは、データベース サーバは DB_LOCALE 設定が暗黙指定している照 合に従って文字列をソートし、クライアント アプリケーションは CLIENT_LOCALE 設定が DB_LOCALE 設定と異なる場合にはこれに従ってソー トを行います。 Dynamic Server Dynamic Server の SET COLLATION 文は、現行セッション用に、DB_LOCALE 設定とは異なるローカライズ済み照合を指定できます。 この文の構文については、「IBM Informix: SQL ガイド: 構文」を参照してくださ い。インデックスまたはトリガなどの、文字列をソートするデータベース オブジェ クトは、各国語文字 (NCHAR) 型値または各国語可変長文字 (NVARCHAR) 型値を 第 3 章 SQL 機能 81 ソートするときに、作成時に有効だった照合を使用します (DB_LOCALE 設定と異 なる場合)。 Dynamic Server の終り データベース サーバの照合順序はソート操作を実行する SQL 文に影響を与えま す。これには CREATE INDEX 文および SELECT 文が含まれます。 CREATE INDEX 内の照合順序 CREATE INDEX 文は表の 1 つ以上の列にインデックスを作成します。 CREATE INDEX 文内の ASC および DESC キーワードは、インデックス キーが昇順と降順 のどちらで保管されるかを制御します。 非デフォルト ロケールを使用するときには、以下のロケール固有の考慮事項が CREATE INDEX 文に適用されます。 v 以下のデータ型の列にインデックスを作成すると、インデックス キーはコード セット順序で保管されます。 – 文字 (CHAR) 型 Dynamic Server – ラージ可変長文字 (LVARCHAR) 型 Dynamic Server の終り – 可変長文字 (VARCHAR) 型 たとえば、データベースがデータベース ロケールを日本語 SJIS ロケール (ja_jp.sjis) として保管する場合、そのデータベースの表内の文字 (CHAR) 型列 のインデックス キーは、日本語 SJIS コード セット順序で保管されます。 v 各国語文字 (NCHAR) 型列または各国語可変長文字 (NVARCHAR) 型列に対して インデックスを作成すると、インデックス キーはローカライズ済み順序で保管さ れます。 たとえば、データベースが日本語 SJIS ロケールを使用している場合、そのデー タベースの表内の各国語文字 (NCHAR) 型列のインデックス キーは、ja_jp.sjis ロケールが定義するローカライズ済み順序で保管されます。 Dynamic Server SET COLLATION 文が、DB_LOCALE 設定と異なるローカライズ済み照合を持つ データベース ロケールを指定した場合、同じセッション内で後に作成するインデッ クス (およびチェック制約) は、常に各国語文字 (NCHAR) 型文字列または各国語 可変長文字 (NVARCHAR) 型文字列のソートにそのローカライズ済み照合を使用し ます。 Dynamic Server の終り デフォルト ロケール (米国英語 (U.S. English)) を使用する場合、インデックス キ ーは、文字型列のデータ型にかかわらず、デフォルト コード セットのコード セッ ト順序 (昇順または降順) で保管されます。デフォルト ロケールはローカライズ済 82 IBM Informix GLS: ユーザーズ ガイド み順序を定義していないため、このロケール (またはローカライズ済み照合順序を 定義していない別のロケール) を使用するデータベース サーバは、以下のデータ型 の列からの文字列をコード セット順序でソートします。 v 文字 (CHAR) 型 Dynamic Server v ラージ可変長文字 (LVARCHAR) 型 Dynamic Server の終り v 各国語文字 (NCHAR) 型 v 各国語可変長文字 (NVARCHAR) 型 v 可変長文字 (VARCHAR) 型 CREATE INDEX 内の照合順序 SELECT 文は問合せを実行します。照合順序は SELECT 文の以下の部分に影響を 与えます。 v ORDER BY 節 v WHERE 節の、関係演算子、BETWEEN 演算子、および IN 演算子 v WHERE 節の MATCHES 条件および LIKE 条件 ORDER BY 節: ORDER BY 節は、列または列セット内に含まれる値によって、 抽出された行をソートします。本節が文字型列をソートするとき、ソートの結果は 以下のとおりに列のデータ型に依存します。 v コード セット順序でソートされる列は以下のとおりです。 – 文字 (CHAR) 型 Dynamic Server – ラージ可変長文字 (LVARCHAR) 型 Dynamic Server の終り – 可変長文字 (VARCHAR) 型 v 各国語文字 (NCHAR) 型列と各国語可変長文字 (NVARCHAR) 型列はローカライ ズ済み順序でソートされます。 クライアントおよびデータベース ロケールとして非デフォルト ロケールを使用し ており、abonnés という表に対して問合せを行うと想定します。次の SELECT 文 は選択リストに文字 (CHAR) 型の numéro (従業員番号)、nom (姓)、および prénom (名) という 3 つの列を指定しています。 SELECT numéro,nom,prénom FROM abonnés ORDER BY nom; 文は、問合せ結果を nom 列内に含まれる値を使用してソートします。 ORDER BY 節に指定されている nom 列は文字 (CHAR) 型列であるため、データベース サーバは問合せ結果をコード セット順序でソートします。 第 3 章 SQL 機能 83 この表に示されているとおり、大文字で始まる名前は小文字で始まる名前よりも前 に並べられ、アクセント付き文字で始まる名前 (Ålesund、Étaix、Ötker、および Øverst) はリストの終わりに並べられます。 表 2. abonnés 表のコード セット順序の場合のデータ セット numéro nom prénom 13612 13606 13607 13602 13604 13610 13613 13603 13611 13609 13600 13615 13601 13608 13605 13614 Azevedo Dupré Hammer Hämmerle LaForêt LeMaître Llanero Montaña Oatfield Tiramisù da Sousa di Girolamo Ålesund Étaix Ötker Øverst Edouardo Freire Michèle Françoise Gerhard Greta Jean-Noël Héloïse Gloria Dolores José Antonio Emily Paolo Alfredo João Lourenço Antunes Giuseppe Sverre Émile Hans-Jürgen Per-Anders ただし、abonnés 表の numéro、nom、および prénom 列が文字 (CHAR) 型列 ではなく各国語文字 (NCHAR) 型列として定義されている場合、問合せの結果は異 なります。 非デフォルト ロケールが、次の表に示されるとおりにデータを照合するローカライ ズ済み順序を定義していると想定します。このローカライズ済み順序は、大文字と 小文字、および同じ文字のアクセントなしバージョンとアクセント付きバージョン に、等価クラスを定義しています。 表 3. abonnés 表のローカライズ済み順序の場合のデータ セット 84 numéro nom prénom 13612 13601 13600 13615 13606 13608 13607 13602 13604 13610 13613 13603 13611 13605 13614 13609 Azevedo Ålesund da Sousa di Girolamo Dupré Étaix Hammer Hämmerle LaForêt LeMaître Llanero Montaña Oatfield Ötker Øverst Tiramisù Edouardo Freire Sverre João Lourenço Antunes Giuseppe Michèle Françoise Émile Gerhard Greta Jean-Noël Héloïse Gloria Dolores José Antonio Emily Hans-Jürgen Per-Anders Paolo Alfredo IBM Informix GLS: ユーザーズ ガイド ORDER BY 節が指定する nom 列が各国語文字 (NCHAR) 型列であるため、同じ SELECT 文がこの場合は問合せ結果をローカライズ済み順序で戻します。 SELECT 文は、ORDER BY 節での列サブ文字列の使用をサポートします。ただ し、この列サブ文字列の使用が、ロケールのサポートしているコード セットで機能 するかどうかを確認する必要があります。詳しくは、78 ページの『列サブ文字列内 の部分文字』を参照してください。 WHERE 節内の論理的述部: WHERE 節は、選択したいデータに対する検索基準と 結合条件を指定します。条件内の表現式が文字データ型の列式であり、検索条件が 以下の論理的述部の 1 つであるとき、照合ルールは WHERE 節に影響を与えま す。 v 関係演算子条件 v BETWEEN 条件 v IN 条件 v EXISTS 条件および ANY 条件 関係演算子条件: 次の SELECT 文では非デフォルト ロケールを想定しています。 より小関係演算子 (<) を使用して、abonnés 表から、nom 列内の値が Hammer よ りも小さい行のみを抽出することを指定します。 SELECT numéro,nom,prénom FROM abonnés WHERE nom < ’Hammer’; nom が文字 (CHAR) 型列である場合、データベース サーバはデフォルト コード セットのコード セット順序を使用して、WHERE 節の指定する行を抽出します。出 力には、この SELECT 文が 2 行しか抽出しないことが示されています。 numéro nom prénom 13612 13606 Azevedo Dupré Edouardo Freire Michèle Françoise これらの 2 行は、84 ページの表 2 に示されている、コード セット順序で並べられ たデータ セット内で、Hammer よりも小さな行です。 ただし、nom が各国語文字 (NCHAR) 型列である場合は、データベース サーバは WHERE 節が指定する行をソートするためにローカライズ済み順序を使用します。 次の出力例には、この SELECT 文が 6 つの行を抽出することが示されています。 numéro nom prénom 13612 13601 13600 13615 13606 13608 Azevedo Ålesund da Sousa di Girolamo Dupré Étaix Edouardo Freire Sverre João Lourenço Antunes Giuseppe Michèle Françoise Émile これらの 6 行は、84 ページの表 3 に示されている、ローカライズ済み順序のデー タ セット内で、Hammer よりも小さな行です。 第 3 章 SQL 機能 85 BETWEEN 条件: 次の SELECT 文は、非デフォルト ロケールを想定し、 BETWEEN 条件を使用して nom 列の値が BETWEEN キーワードの次にある 2 つ の表現式値の包括的範囲内にある行のみを抽出します。 SELECT numéro,nom,prénom FROM abonnés WHERE nom BETWEEN ’A’ AND ’Z’; 問合せ結果は、nom が文字 (CHAR) 型列と各国語文字 (NCHAR) 型列のどちらで あるかに依存します。 nom が文字 (CHAR) 型列である場合、データベース サー バはデフォルト コード セットのコード セット順序を使用して、WHERE 節に指定 されている行を抽出します。次の出力例に問合せ結果を示します。 numéro nom prénom 13612 13606 13607 13602 13604 13610 13613 13603 13611 13609 Azevedo Dupré Hammer Hämmerle LaForêt LeMaître Llanero Montaña Oatfield Tiramisù Edouardo Freire Michèle Françoise Gerhard Greta Jean-Noël Héloïse Gloria Dolores José Antonio Emily Paolo Alfredo データベース サーバが nom 値について 84 ページの表 2 に示されているとおり にコード セット順序を使用するため、これらの問合せ結果に以下の行は含まれませ ん。 v nom の値が小文字で始まる行: da Sousa と di Girolamo v アクセント付き文字で始まる行: Ålesund、Étaix、Ötker、および Øverst ただし、nom が各国語文字 (NCHAR) 型列である場合は、データベース サーバは 行をソートするためにローカライズ済み順序を使用します。次の出力に問合せ結果 を示します。 86 numéro nom prénom 13612 13601 13600 13615 13606 13608 13607 13602 13604 13610 13613 13603 13611 13605 13614 13609 Azevedo Ålesund da Sousa di Girolamo Dupré Étaix Hammer Hämmerle LaForêt LeMaître Llanero Montaña Oatfield Ötker Øverst Tiramisù Edouardo Freire Sverre João Lourenço Antunes Giuseppe Michèle Françoise Émile Gerhard Greta Jean-Noël Héloïse Gloria Dolores José Antonio Emily Hans-Jürgen Per-Anders Paolo Alfredo IBM Informix GLS: ユーザーズ ガイド データベース サーバは nom 値についてローカライズ済み順序を使用するため、こ れらの問合せ結果には nom の値が小文字またはアクセント付き文字で始まる行が 含まれています。 IN 条件: IN 条件は、IN キーワードの左にある表現式が、キーワードの右にあ る、括弧で囲まれた値のリストに使用されているときに適合します。この SELECT 文は、非デフォルト ロケールを想定し、IN 条件を使用して nom 列の値が Azevedo、Llanero、または Oatfield のいずれかである行のみを抽出します。 SELECT numéro,nom,prénom FROM abonnés WHERE nom IN (’Azevedo’, ’Llanero’, ’Oatfield’); 問合せ結果は、nom が文字 (CHAR) 型列と各国語文字 (NCHAR) 型列のどちらで あるかに依存します。 nom が文字 (CHAR) 型列である場合、84 ページの表 2 に 示されているとおり、データベース サーバはコード セット順序を使用します。デ ータベース サーバは nom の値が Azevedo である行を抽出しますが、A、a、およ び Å はコード セット順序では等しくないため、nom の値が azevedo または Åzevedo である行は抽出しません。問合せは、nom 値が Llanero および Oatfield である行も戻します。 ただし、nom が各国語文字 (NCHAR) 型列である場合は、84 ページの表 3 に示さ れているように、データベース サーバは行をソートするためにローカライズ済み順 序を使用します。ロケールが A、a、および Å をローカライズ済み順序で等価文字 として定義している場合、問合せは nom の値が Azevedo、azevedo、または Åzevedo である行を戻します。 IN キーワードの後の括弧付きリスト内のその他の 名前にも同じ選択ルールが適用されます。 MATCHES および LIKE 条件での比較 条件内の表現式が文字データ型を持つ列式であり、検索条件が以下の条件の 1 つで あるとき、照合ルールは WHERE 節にも影響を与えます。 v MATCHES 条件 v LIKE 条件 MATCHES 条件: MATCHES 条件は、一致する文字列についてテストします。 MATCHES キーワードの左側の列の値が、MATCHES キーワードの右側に引用符付 き文字列によって指定されたパターンに一致するときに、条件は真になります (つ まり適合します)。文字列内でワイルドカード文字を使用できます。たとえば、ブラ ケットを使用して文字の範囲を指定できます。 MATCHES に関する詳細について は、「IBM Informix: SQL ガイド: 構文」を参照してください。 MATCHES 表現式が文字列内の文字の範囲をリストしないときには、リテラル一致 を指定します。リテラル一致では、照合考慮事項が働くかどうかが列のデータ型に よって以下のとおりに決定されます。 v 文字 (CHAR) 型列と可変長文字 (VARCHAR) 型列の場合、照合考慮事項は働き ません。 v 各国語文字 (NCHAR) 型列と各国語可変長文字 (NVARCHAR) 型列の場合、これ らのデータ型がローカライズ済み順序を使用し、ロケールが照合の等価クラスを 定義する可能性があるため、照合考慮事項が働く可能性があります。 第 3 章 SQL 機能 87 たとえば、ローカライズ済み順序は a と A が等価クラスであることを指定する 可能性があります。つまり、それらは照合順序内で同位になります。ローカライ ズ済み順序に関する詳細については、10 ページの『ローカライズ順序』を参照し てください。 次の表の例は、ユーザが SELECT 文内に MATCHES キーワードを範囲なしで指定 したときに文字 (CHAR) 型列と各国語文字 (NCHAR) 型列によって生成される別々 の結果を示しています。これらの例は、A と a を等価クラス内に定義している非デ フォルト ロケールの使用を想定しています。表 mytable 内の col1 が文字 (CHAR) 型列であり、col2 が各国語文字 (NCHAR) 型列であることも想定されてい ます。 問合せ SELECT WHERE SELECT WHERE * FROM mytable col1 MATCHES ’art’ * FROM mytable col2 MATCHES ’art’ データ型 問合せ結果 文字 (CHAR) 型 NCHAR 小文字の a を使用した値 ’art’ が列 col1 に含まれるすべての行 値 ’art’ または ’Art’ が列 col2 に含まれる すべての行 MATCHES キーワードを使用して範囲を指定すると、文字データ型のすべての列に ついて照合考慮事項が働きます。 MATCHES キーワードの左側の列が各国語文字 (NCHAR) 型、各国語可変長文字 (NVARCHAR) 型、文字 (CHAR) 型、可変長文字 (VARCHAR) 型、または (Dynamic Server の場合のみ) ラージ可変長文字 (LVARCHAR) 型で、MATCHES キーワードの文字列オペランドにブラケット ( [ ] ) が使用されて範囲が指定されているとき、ロケールがローカライズ済み順序 を定義している場合にはソートはその順序に従います。 重要: データベース サーバは、MATCHES 演算子と共に指定される範囲内の文字を 判別するときに、DB_LOCALE または SET COLLATION によってローカラ イズ済み順序が設定されている場合にはその順序を使用します (これには文字 (CHAR) 型列、ラージ可変長文字 (LVARCHAR) 型列、可変長文字 (VARCHAR) 型列も含まれます)。この動作は、データベース サーバは文字 (CHAR) 型列、ラージ可変長文字 (LVARCHAR) 型列、および可変長文字 (VARCHAR) 型列に対するすべての操作にコード セット順序を使用し、各国 語文字 (NCHAR) 型列と各国語可変長文字 (NVARCHAR) 型列に対するソー ト操作にはローカライズ済み順序 (定義されている場合) を使用するというル ールの例外です。 SELECT 文内で範囲を指定して MATCHES キーワードを使用するときに、データ ベース サーバが各国語文字 (NCHAR) 型列、各国語可変長文字 (NVARCHAR) 型 列、ラージ可変長文字 (LVARCHAR) 型列、文字 (CHAR) 型列、および各国語文字 (VARCHAR) 型列を処理する方法を、いくつかの単純な例で示します。 abonnés 表から姓 (nom) が E から P までの範囲の文字で始まるすべての従業員の従業員番 号、名、姓を抽出したいとします。また、nom 列が各国語文字 (NCHAR) 型列であ ることも想定します。この問合せを行うために、次の SELECT 文は WHERE 節内 で MATCHES 条件を使用します。 SELECT numéro,nom,prénom FROM abonnés WHERE nom MATCHES ’[E-P]*’ ORDER BY nom; 88 IBM Informix GLS: ユーザーズ ガイド Étaix、Ötker、および Øverst の行は、ローカライズ済み順序では、84 ページの表 3 に示されているとおり、各名前のアクセント付きの最初の文字が nom 列につい ての E から P までの MATCHES 範囲に含まれるため、問合せ結果内に示されま す。 numéro nom prénom 13608 13607 13602 13604 13610 13613 13603 13611 13605 13614 Étaix Hammer Hämmerle LaForêt LeMaître Llanero Montaña Oatfield Ötker Øverst Émile Gerhard Greta Jean-Noël Héloïse Gloria Dolores José Antonio Emily Hans-Jürgen Per-Anders nom が文字 (CHAR) 型列である場合の問合せ結果は、nom が各国語文字 (NCHAR) 型列であるときと全く同じになります。列が文字 (CHAR) 型であるか各 国語文字 (NCHAR) 型であるかにかかわらず、データベース サーバは常にローカラ イズ済み順序を使用して範囲に含まれる文字を判別します。 LIKE 条件: LIKE 条件も、一致する文字列についてテストします。 MATCHES 条 件と同様、LIKE 条件は、LIKE キーワードの左側の列の値が、LIKE キーワードの 右側に引用符付き文字列によって指定されたパターンに一致する場合に真になりま す (つまり適合します)。引用符付き文字列では、ある記号のみをワイルドカードと して使用できます。 LIKE に関する詳細については、「IBM Informix: SQL ガイド: 構文」を参照してください。 LIKE 条件はリテラル一致 のみを指定できます。リテラル一致では、照合考慮事項 が働くかどうかが列のデータ型によって以下のとおりに決定されます。 v 文字 (CHAR) 型列と可変長文字 (VARCHAR) 型列の場合、照合考慮事項は働き ません。 v 各国語文字 (NCHAR) 型列と各国語可変長文字 (NVARCHAR) 型列の場合、これ らのデータ型がローカライズ済み順序を使用し、ロケールが照合の等価クラスを 定義する可能性があるため、照合考慮事項が働く可能性があります。たとえば、 ローカライズ済み順序は a と A が等価クラスであることを指定する可能性があ ります。 LIKE キーワードは文字の範囲をサポートしません。つまり、LIKE 条件では、ブラ ケットで囲まれた文字を使用して範囲を指定することはできません。 LIKE および MATCHES 条件内のワイルドカード文字: IBM Informix 製品は、 MATCHES および LIKE 条件内のワイルドカード文字として以下の ASCII 文字を サポートします。 条件 ワイルドカード文字 LIKE MATCHES _ % * ? [ ] ^ - 第 3 章 SQL 機能 89 文字 (CHAR) 型データと可変長文字 (VARCHAR) 型データの場合、データベース サーバは LIKE および MATCHES 条件内のパターン マッチングでバイト単位での 比較を行います。各国語文字 (NCHAR) 型データと各国語可変長文字 (NVARCHAR) 型データの場合、データベース サーバは LIKE および MATCHES 条件内のパターン マッチングをバイトではなく論理的文字を基にして行います。こ のため、LIKE 節のアンダスコア ( _ ) ワイルドカードと、MATCHES 節の ? (疑 問符) ワイルドカードは、次の表に示されているとおり、シングルバイト文字 1 文 字またはマルチバイト文字 1 文字に一致します。 条件 引用符付き文字列 列値 結果 LIKE LIKE MATCHES MATCHES ’ab_d’ ’ab_d’ ’ab?d’ ’ab?d’ ’abcd’ ’abA1A2d’ ’abcd’ ’abA1A2d’ True True True True データベース サーバは、マルチバイト文字をリテラル文字として処理します。デー タベース サーバに、ワイルドカード文字のリテラルな意味での解釈を指示するに は、文字の前にエスケープ文字を置く必要があります。エスケープ文字にはシング ルバイト文字を使用しなければなりません。データベース サーバはこの目的でのマ ルチバイト文字の使用を認識しません。デフォルト エスケープ文字は円記号 (¥) で す。 次の MATCHES 条件は、示されている列値について結果 TRUE を戻します。 条件 引用符付き文字列 列値 結果 MATCHES ’ab¥?d’ ’ab?d’ True SQL 長さ関数の使用 SQL 長さ関数は、SELECT 文とその他のデータ操作文で使用できます。長さ関数 は、列、文字列、または変数の長さをバイトまたは文字単位で戻します。 ロケールの選択は、以下の 3 つの SQL 長さ関数に影響を与えます。 v LENGTH 関数 v OCTET_LENGTH 関数 v CHAR_LENGTH (または CHARACTER_LENGTH) 関数 これらの関数の構文については、「IBM Informix: SQL ガイド: 構文」の表現式に関 するセグメントを参照してください。 LENGTH 関数 LENGTH 関数は、文字データ内のデータのバイト数を戻します。ただし、LENGTH 関数の動作はユーザが指定する引数の型によって異なります。引数には、引用符付 き文字列、テキスト (TEXT) 型以外の文字型列、テキスト (TEXT) 型列、ホスト変 数、または SPL ルーチン変数を指定できます。 次の表に、LENGTH 関数によるこれらの引数型のそれぞれに対する操作方法を示し ます。この表の「例」列では、記号 s を使用して後書きのシングルバイトの空白文 字を表します。 90 IBM Informix GLS: ユーザーズ ガイド この表では、すべての引数がシングルバイト文字で構成されていることが想定され ています。 LENGTH 引数 動作 引用符付き文字列 ロケールで定義されたとおりの 後書きの空白を除いた、文字列 内のバイト数を戻します。 定義された列の長さにかかわら 文字 (CHAR) 型 ず、後書きの空白文字を除い 列、可変長文字 (VARCHAR) 型列、 た、列内のバイト数を戻しま す。 ラージ可変長文字 (LVARCHAR) 型 列、各国語文字 (NCHAR) 型列、ま たは各国語可変長文 字 (NVARCHAR) 型 列 テキスト (TEXT) 型 後書きの空白文字を含む、列内 列 のバイト数を戻します。 ホストまたはプロシ ジャ変数 例 文字列が ’Ludwig’ の場合、結果は 6 になります。文字列が ’Ludwigssss’ の場合も、結果は 6 になります。 customer 表の fname 列が CHAR(15) 列であり、この列に文字列 ’Ludwig’ が含まれている場合、結果 は 6 になります。 fname 列に文字 列 ’Ludwigssss’ が含まれている場合 も、結果は 6 になります。 catalog 表の cat_descr 列がテキス ト (TEXT) 型列であり、この列に文 字列 ’Ludwig’ が含まれている場合、 結果は 6 になります。 cat_descr 列に文字列 ’Ludwigssss’ が含まれて いる場合、結果は 10 になります。 定義された変数の長さにかかわ プロシジャ変数 f_name が らず、後書きの空白を除いた、 CHAR(15) として定義されており、こ 変数に含まれるバイト数を戻し の変数に文字列 ’Ludwig’ が含まれて いる場合、結果は 6 になります。 ます。 f_name 変数に文字列 ’Ludwigssss’ が含まれている場合も、結果は 6 に なります。 デフォルト ロケールまたはシングルバイト コード セットを持つロケールを使用し ているとき、LENGTH 関数は列内の文字数を戻しているように見えます。 次の例 で、customer 表を含む stores_demo データベースは、米国英語 (U.S. English) ロケール用のデフォルト コード セットを使用しています。ユーザが LENGTH 関 数を伴う SELECT 文を入力して、顧客番号が 106 よりも小さい行の姓、姓の長 さ、および顧客番号を表示するとします。 SELECT lname AS cust_name, length (fname) AS length, customer_num AS cust_num FROM customer WHERE customer_num < 106 次の出力例に問合せの結果を示します。抽出された各行について、length 列に lname (cust_name) 列内の文字数が示されているように見えます。しかし、実際は length 列には lname 列内のバイト数が表示されています。 デフォルト コード セットでは、1 バイトに 1 文字が保管されます。デフォルト コード セットに関する詳細については、21 ページの『デフォルト ロケール』を参 照してください。 第 3 章 SQL 機能 91 cust_name length cust_num Ludwig Carole Philip Anthony Raymond 6 6 6 7 7 101 102 103 104 105 日本語 SJIS コード セットなどのマルチバイト コード セットをサポートするロケ ールで LENGTH 関数を使用するときには、文字とバイトの区別が意味を持ちま す。 LENGTH は引数内のバイト数を戻します。この結果は、文字数と異なる可能 性があります。 次の例では、customer_multi 表を含むデータベースのロケールが、マルチバイト コード セットを持つことが想定されています。 LENGTH 関数を伴う SELECT 文 をユーザが入力して、番号が 199 である顧客の lname、その長さ、および customer_num を表示するとします。 SELECT lname AS cust_name, length (fname) AS length, customer_num AS cust_num FROM customer_multi WHERE customer_num = 199 顧客 199 の lname が 4 文字で構成されているとします。 aA1A2bB1B2 この表現の最初の文字 (記号 a) はシングルバイト文字です。 2 番目の文字 (記号 A1A2) は 2 バイト文字です。 3 番目の文字 (記号 b) はシングルバイト文字です。 4 番目の文字 (記号 B1B2) は 2 バイト文字です。 次の出力例に問合せの結果を示します。顧客の名が 4 文字で構成されていても、 「length」列にはこの名前の合計バイト数が 6 であることが示されています。 cust_name 1 2 1 aA A bB B 2 length cust_num 6 199 OCTET_LENGTH 関数 OCTET_LENGTH 関数はバイト数を戻し、一般に後書きの空白文字をバイト カウン トに入れます。この SQL 長さ関数は、ロケールが定義する空白の定義を使用しま す。 OCTET_LENGTH は、文字型列、引用符付き文字列、ホスト変数、または SPL 変数内のバイト数を戻します。 OCTET_LENGTH の実際の動作はユーザが指 定する引数の型によって異なります。 次の表に、各引数型に対する OCTET_LENGTH 関数の操作方法を示します。この表 の「例」列では、記号 s を使用して後書きのシングルバイトの空白文字を表しま す。また、わかりやすくするために、「例」列では例の文字列がシングルバイト文 字で構成されていることも想定されています。 92 IBM Informix GLS: ユーザーズ ガイド OCTET_LENGTH 引数 動作 引用符付き文字列 後書きの空白文字を含む、文 字列内のバイト数を戻しま す。 文字 (CHAR) 型列ま 後書きの空白文字を含む、文 字列内のバイト数を戻しま たは 各国語文字 (NCHAR) す。この値は、列の定義済み の長さ (バイト単位) です。 型列 可変長文字 (VARCHAR) 型列ま たは 各国語可変長文字 (NVARCHAR) 型列 後書きの空白を含む、文字列 内のバイト数を戻します。値 は宣言された最大列サイズで はなく、文字列の実際の長さ (バイト単位) になります。 テキスト (TEXT) 型 列 後書きの空白文字を含む、列 内のバイト数を戻します。 ホストまたはプロシ ジャ変数 定義された変数の長さにかか わらず、後書きの空白を含 む、変数に含まれるバイト数 を戻します。 例 文字列が ’Ludwig’ の場合、結果は 6 になります。文字列が ’Ludwigssss’ の場合、結果は 10 になります。 customer 表の fname 列が CHAR(15) 列であり、この列に文字列 ’Ludwig’ が含まれている場合、結果 は 15 になります。 fname 列に文字 列 ’Ludwigsss’ が含まれている場合 も、結果は 15 になります。 catalog 表の cat_advert 列が VARCHAR(255, 65) 列であり、この 列に文字列 ″Ludwig″ が含まれている 場合、結果は 6 になります。列に文 字列 ’Ludwigssss’ が含まれている場 合、結果は 10 になります。 catalog 表の cat_descr 列がテキス ト (TEXT) 型列であり、この列に文 字列 ’Ludwig’ が含まれている場合、 結果は 6 になります。 cat_descr 列に文字列 ’Ludwigssss’ が含まれて いる場合、結果は 10 になります。 プロシジャ変数 f_name が CHAR(15) として定義されており、こ の変数に文字列 ’Ludwig’ が含まれて いる場合、結果は 6 になります。 f_name 変数に文字列 ’Ludwigssss’ が含まれている場合、結果は 10 にな ります。 LENGTH 関数と OCTET_LENGTH 関数の違いは、OCTET_LENGTH が一般にバイ ト カウント内に後書きの空白を入れるのに対して、LENGTH は一般にバイト カウ ントから後書きの空白を除外するところにあります。 LENGTH 関数と比較しての OCTET_LENGTH 関数の利点は、LENGTH 関数が列値 をトリムして、トリムされた文字列の長さを戻すのに対して、OCTET_LENGTH 関 数は実際の列サイズを提供するところにあります。 OCTET_LENGTH 関数のこの利 点は、ISO8859-1 などのシングルバイト コード セットと、日本語 SJIS コード セ ットなどのマルチバイト コード セットの両方に当てはまります。 次の表に、OCTET_LENGTH 関数が生成する可能性のあるいくつかの結果を示しま す。 第 3 章 SQL 機能 93 OCTET_LENGTH 入力文字列 ’abc ’ ’A1A2B1B2’ ’aA1A2bB1B2’ 説明 結果 シングルバイト文字 4 文字 (文字 abc と、後続の空白 1 つ) の引用符付き文字列 マルチバイト文字 2 文字の引用符付き文字列 シングルバイト文字 2 文字とマルチバイト文字 2 文字の 引用符付き文字列 4 4 6 CHAR_LENGTH 関数 CHAR_LENGTH 関数 (CHARACTER_LENGTH 関数とも呼ばれる) は、引用符付き 文字列、文字データ型の列、ホスト変数、またはプロシジャ変数内の文字数を戻し ます。ただし、この関数の実際の動作は、ユーザが指定する引数の型によって異な ります。 次の表に、CHAR_LENGTH 関数による各引数型に対する操作方法を示します。この 表の「例」列では、記号 s を使用して後書きのシングルバイトの空白を表します。 わかりやすくするために、「例」列では文字列がシングルバイト文字で構成されて いると想定します。 CHAR_LENGTH 引数 動作 例 文字 (CHAR) 型列 または 各国語文字 (NCHAR) 型列 ロケールで定義されたとおりの 後書きの空白を含む、文字列内 の文字数を戻します。 後書きの空白文字を含む、文字 列内の文字数を戻します。この 値は、列の定義済みの長さ (バ イト単位) です。 可変長文字 (VARCHAR) 型列ま たは 各国語可変長文字 (NVARCHAR) 型列 空白文字を含む、文字列内の文 字数を戻します。値は宣言され た最大列サイズではなく、文字 列の実際の長さ (バイト単位) になります。 文字列が ’Ludwig’ の場合、結果は 6 になります。文字列が ’Ludwigssss’ の場合、結果は 10 になります。 customer 表の fname 列が CHAR(15) 列であり、この列に文字列 ’Ludwig’ が含まれている場合、結果 は 15 になります。 fname 列に文字 列 ’Ludwigssss’ が含まれている場 合、結果は 15 になります。 catalog 表の cat_advert 列が VARCHAR(255, 65) であり、この列 に文字列 ″Ludwig″ が含まれている場 合、結果は 6 になります。列に文字 列 ’Ludwigssss’ が含まれている場 合、結果は 10 になります。 catalog 表の cat_descr 列がテキス ト (TEXT) 型列であり、この列に文 字列 ’Ludwig’ が含まれている場合、 結果は 6 になります。 cat_descr 列に文字列 ’Ludwigssss’ が含まれて いる場合、結果は 10 になります。 プロシジャ変数 f_name が CHAR(15) として定義されており、こ の変数に文字列 ’Ludwig’ が含まれて いる場合、結果は 6 になります。 f_name 変数に文字列 ’Ludwigssss’ が含まれている場合、結果は 10 にな ります。 引用符付き文字列 テキスト (TEXT) 型 後書きの空白文字を含む、列内 列 の文字数を戻します。 ホストまたはプロシ ジャ変数 94 IBM Informix GLS: ユーザーズ ガイド 宣言された変数の長さにかかわ らず、後書きの空白を含む、変 数に含まれる文字数を戻しま す。 CHAR_LENGTH 関数はマルチバイト コード セットを使用する場合に特に便利で す。引用符付き文字列にマルチバイト文字が含まれている場合、文字列内の文字数 は、文字列内のバイト数と異なります。 CHAR_LENGTH 関数を使用して、引用符 付き文字列内の文字数を判別できます。 ただし、CHAR_LENGTH 関数は、シングルバイト コード セットでも便利に使用で きます。これらのコード セットでは、列内のバイト数が列内の文字数に等しくなり ます。 LENGTH 関数を使用して列内のバイト数 (この場合、文字数に等しい) を判 別する場合、LENGTH は列値をトリムし、トリムされた文字列の長さを戻します。 対照的に、CHAR_LENGTH は列値をトリムせず、宣言された列サイズを戻します。 次の表に、CHAR_LENGTH 関数が引用符付き文字列について生成する可能性のある いくつかの結果を示します。 CHAR_LENGTH 入力文字列 ’abc ’ ’A1A2B1B2’ ’aA1A2B1B2’ 説明 シングルバイト文字 と、後続の空白文字 マルチバイト文字 2 シングルバイト文字 引用符付き文字列 結果 4 文字の引用符付き文字列 (文字 abc 1 文字) 文字の引用符付き文字列 2 文字とマルチバイト文字 2 文字の 4 2 4 ロケールを区別するデータ型の使用 前の節では、各国語文字 (NCHAR) 型と各国語可変長文字 (NVARCHAR) 型をロー カライズ済み順序 (ロケールによって定義されている場合) でソートする方法につい て説明しました。本節では、データベース サーバが金額 (MONEY) 型、拡張デー タ型、およびスマート ラージ オブジェクト (文字ラージ オブジェクト(CLOB) 型 とバイナリ ラージ オブジェクト (BLOB) 型) を扱う方法へのロケールの影響につ いて説明します。 これらのデータ型の構文については、「IBM Informix: SQL ガイド: 構文」を参照し てください。これらのデータ型の説明については、「IBM Informix: SQL ガイド: 参 照」を参照してください。 金額 (MONEY) 型の処理 金額 (MONEY) 型は、通貨量を保管します。このデータ型は、最大 32 の有効桁ま での固定小数点 10 進数を保管します。金額 (MONEY) 型列は、CREATE TABLE および ALTER TABLE などのデータ定義文内に指定できます。 ロケールの選択は、以下の方法で通貨データに影響を与えます。 v 金額 (MONEY) 型列の宣言内の scale (小数点以下桁数) のデフォルト値 v クライアント アプリケーションが使用する通貨表記 ロケールは、デフォルトの小数点以下桁数と通貨表記を、ロケール ファイルの MONETARY カテゴリーに定義します。ロケール ファイルの MONETARY カテゴ リーに関する詳細については、157 ページの『MONETARY カテゴリ』を参照して ください。 第 3 章 SQL 機能 95 scale (小数点以下桁数) パラメータ値の指定 金額 (MONEY) 型列は次の構文で定義します。 (1) データ型 MONEY ( 16 precision 2 , scale ) 注: 1 SQLS を参照してください。 要素 目的 precision 10 進数 (DECIMAL) 型または金額 (MONEY) 型の有効桁の合計数 1 から 32 までの整数を指定する必要があります。 デフォルト precision は 16 です。 scale 小数点の右側の桁数 scale は、1 から precision までの整数でなければなりません。 scale を省略した場 合、データベース サーバはデータベース ロケールが定義しているデフォルトの小 数点以下桁数 (scale) を提供します。デフォルト ロケール (米国英語 (U.S. English)) の場合、ダイヤグラムに示されているとおり、デフォルトは 2 です。 内部的には、データベース サーバは金額 (MONEY) 型値を 10 進数 (DECIMAL) 型値として保管します。 precision パラメータは合計有効桁数を定義し、scale パラ メータは小数点記号の右側の合計桁数を定義します。たとえば、列を MONEY(8,3) として定義した場合、列に最大 8 桁を含めることが可能であり、それらの桁数のう ち 3 桁は小数点記号の右側の桁になります。列内のデータ値の例として、 12345.678 を挙げることができます。 金額 (MONEY) 型列の宣言から scale パラメータを省略した場合、データベース サーバはロケールが定義している小数点以下桁数を提供します。デフォルト ロケー ル (米国英語 (U.S. English)) の場合、データベース サーバはデフォルト小数点以下 桁数 2 を使用します。データ型 MONEY(precision) は、データ型 DECIMAL(precision,2) と同じ内部フォーマットで保管されます。たとえば、列を MONEY(10) として定義した場合、データベース サーバはデータ型 DECIMAL(10,2) と同じフォーマットで列を作成します。この列内のデータ値の例と して 12345678.90 を挙げることができます。 非デフォルト ロケールで金額 (MONEY) 型列を宣言するときに scale を省略した 場合、データベース サーバはロケール固有のデフォルト小数点以下桁数を指定する 10 進数 (DECIMAL) 型と同じ内部フォーマットで列を宣言します。たとえば、列を MONEY(10) として定義し、ロケールがデフォルト小数点以下桁数を 4 として定義 している場合、データベース サーバは列のデータ型を DECIMAL(10,4) と同じフォ ーマットで保管します。この列内のデータ値の例として 123456.7890 を挙げること ができます。 多くの欧州言語の GLS コード セットは、通貨値内のユーロ記号をサポートできま す。金額 (MONEY) 型の完全な構文については、「IBM Informix: SQL ガイド: 構 文」を参照してください。金額 (MONEY) 型の詳細については、「IBM Informix: SQL ガイド: 参照」を参照してください。 96 IBM Informix GLS: ユーザーズ ガイド 通貨表記のフォーマット クライアント アプリケーションは、金額 (MONEY) 型列内の値を、ロケールが定 義している通貨表記に書式設定します。この表記は、通貨記号、3 桁区切り記号、 および小数点記号を指定します。通貨表記に関する詳細については、14 ページの 『数値および通貨フォーマット』を参照してください。 デフォルト ロケールでは、デフォルト通貨記号はドル記号 ($)、デフォルト 3 桁区 切り記号はカンマ ( , )、デフォルト小数点記号はピリオド記号 ( . ) です。非デフ ォルト ロケールでは、通貨値用の文化的差異に基づいた該当する通貨表記をロケー ルが定義します。また、DBMONEY 環境変数を使用して、通貨値用の通貨記号と小 数点記号をカスタマイズできます。詳しくは、36 ページの『通貨値のカスタマイ ズ』を参照してください。 拡張データ型の処理 (IDS のみ) ユーザは、Dynamic Server の拡張可能データ型システムを使用して、新しいデータ 型と、データベース サーバに対するそれらの新しいデータ型の動作を定義すること ができます。本節では、GLS 処理でこれらの型がどのように扱われるかを説明しま す。「IBM Informix: ユーザ定義ルーチンおよびデータ タイプ 開発者ガイド」も参 照してください。 不透明 (opaque) 型 不透明 (opaque) 型はクライアント アプリケーションに完全にカプセル化されてい ます。つまり、その内部構造はデータベース サーバから認識されません。このた め、データベース サーバはコード セット変換などのロケール固有タスクを不透明 (opaque) 型について自動的に実行することはできません。すべての GLS 処理 (コー ド セット変換、ローカライズ済み照合順序、エンド ユーザ フォーマットなど) は、不透明 (opaque) 型サポート関数内で実行する必要があります。 不透明 (opaque) 型を作成するとき、ロケールを区別するデータを処理できる C UDR としてサポート関数を作成できます。詳しくは、120 ページの『不透明 (opaque) 型でロケールを区別するデータ』を参照してください。 複合データ型 Dynamic Server は、以下の複合データ型もサポートします。 v コレクション (collection) 型: セット (SET) 型、マルチセット (MULTISET) 型、 およびリスト (LIST) 型 v 行 (row) 型: 名前付き行 (ROW) 型と名前なし行 (ROW) 型 これらのデータ型は、文字、時刻、または数値データ型のメンバを持つことができ ます。データベース サーバは、これらのデータ型が複合データ型の一部であるとき にも、これらのデータ型の GLS 処理を行うことができます。 ディスティンクト (distinct) 型 ディスティンクト (distinct) 型の内部記憶域表現はそのソース型と同じですが、名前 は異なります。ソース型として、不透明 (opaque) 型または組込み型、名前付き行 (ROW) 型、あるいは別のディスティンクト (distinct) 型を使用できます。 Dynamic Server は、ディスティンクト (distinct) 型の GLS 考慮事項を、そのソース型と同じ 方法で処理します。 第 3 章 SQL 機能 97 スマート ラージ オブジェクトの処理 (IDS のみ) スマート ラージ オブジェクトは、テキストまたはイメージを保管できます。スマ ート ラージ オブジェクトは、細かく分割されて保管および抽出され、復旧および トランザクション ロール バックなどのデータベース プロパティを持っています。 Dynamic Server は以下の 2 つのスマート ラージ オブジェクト型をサポートしてい ます。 v バイナリ ラージ オブジェクト (BLOB) 型は、イメージとビデオ クリップを含 む、どの型のバイナリ形式データも保管します。 v 文字ラージ オブジェクト (CLOB) 型は、PostScript または HTML ファイルなど のテキストを保管します。 スマート ラージ オブジェクトはバイト単位でシークすることができますが、文字 単位でシークすることはできません。このため、スマート ラージ オブジェクト内 の情報を検索するときには、マルチバイト文字のバイト オフセットを管理しなけれ ばなりません。 GLS ライブラリの関数は、このタスクの実行を支援します。詳し くは、「IBM Informix: GLS Programmer’s Manual」を参照してください。 クライアント アプリケーションを通してスマート ラージ オブジェクトにアクセス するには、ESQL/C または DataBlade API などの API を使用しなければなりませ ん。 GLS は SQL を介したスマート ラージ オブジェクト データへの直接アクセ スをサポートしていないため、GLS はデータを自動的に処理しません (つまり、自 動コード セット変換、ローカライズ済み照合順序、エンド ユーザ フォーマットな どを行いません)。すべてのサポートは API 内で行われなければなりません。 ファイルから文字ラージ オブジェクト (CLOB) 型データをコピーするときには、 必要な文字セット変換が Dynamic Server によって実行されます。クライアントまた はサーバ ロケール (それぞれクライアントおよびサーバ ファイルからのコピー時) がデータベース ロケールと異なる場合、Dynamic Server はデータベース ロケール への変換を行うためのルーチンを呼び出します。 データ操作文の使用 ロケールの選択は、以下の SQL データ操作文に影響を与える可能性があります。 v DELETE v INSERT v LOAD v UNLOAD v UPDATE これらの SQL 文の GLS に関する性質については、節で説明されています。これら の文の詳細については、「IBM Informix: SQL ガイド: 構文」を参照してください。 WHERE 節内の条件の指定 以下の文に WHERE 節を指定して操作対象の行を指定できます。 v DELETE 文の場合、WHERE 節は削除する行を指定します。 v 埋込み SELECT を伴う INSERT 文の場合、WHERE 節は別の表から挿入する行 を指定します。 98 IBM Informix GLS: ユーザーズ ガイド v UPDATE 文の場合、WHERE 節は更新する行を指定します。さらに、SET 節に は、別の行に割り当てられる値を持つ行を WHERE 節によって識別する埋込み SELECT 文を指定できます。 v UNLOAD 文の場合、埋込み SELECT の WHERE 節はアンロードする行を指定 します。 ロケールの選択は、これらの WHERE 節の使用に、SELECT の WHERE 節への影 響と同じ方法で影響を与えます。詳しくは、85 ページの『WHERE 節内の論理的述 部』と 87 ページの『MATCHES および LIKE 条件での比較』を参照してくださ い。 元号ベース日付の指定 以下の SQL 文は、日付 (DATE) 型列値および日時 (DATETIME) 型列値を指定す る可能性があります。 v DELETE 文の WHERE 節 v INSERT 文の VALUES 節 v UPDATE 文の SET 節 日付 (DATE) 型列値を上記の SQL 文のいずれかに指定すると、データベース サー バは GL_DATE (または DBDATE) 環境変数を使用して日付表現式を以下のとおり に解釈します。 v GL_DATE (または DBDATE) を元号ベース (アジア) 日付書式として設定した場 合、日付表現式に元号ベース日付書式を使用できます。 v GL_DATE (または DBDATE) 環境変数を元号ベース日付書式として設定してい ない場合、サーバ処理ロケールが元号ベース日付をサポートしている場合にの み、日付表現式に元号ベース日付書式を使用できます。サーバ処理ロケールの詳 細については、27 ページの『サーバ処理ロケールの決定』を参照してください。 v ロケールが元号ベース日付をサポートしていない場合、日付表現式に元号ベース 日付書式を使用できません。この場合、元号ベース日付書式を指定しようとする と SQL 文は失敗します。 日時 (DATETIME) 型列値を指定すると、データベース サーバは GL_DATE (また は DBDATE) 環境変数ではなく GL_DATETIME (または DBTIME) 環境変数を使 用して、表現式を解釈します。 詳しくは、35 ページの『元号ベースの日時フォーマット』を参照してください。 データのロードとアンロード LOAD 文と UNLOAD 文を使用すると、オペレーティング システム テキスト フ ァイルによって、データベースから、およびデータベースにデータを転送できま す。以下の節で、LOAD 文と UNLOAD 文の、GLS に関する性質について説明し ます。これらの文の使用法と構文の詳細については、「IBM Informix: SQL ガイド: 構文」を参照してください。 データベースへのデータのロード LOAD 文は、オペレーティング システム ファイルから既存の表またはビューにデ ータを挿入します。このオペレーティング システム ファイルは LOAD FROM フ 第 3 章 SQL 機能 99 ァイルと呼ばれます。このファイル内のデータには、クライアント コード セット が定義するどの文字も含めることができます。クライアント ロケールがマルチバイ ト コード セットをサポートしている場合、データにマルチバイト文字を含めるこ とができます。クライアント コード セットと異なるがクライアント コード セッ トに変換可能なコード セットをデータベース ロケールがサポートしている場合、 クライアントはデータをデータベース サーバに送信する前にそのデータに対してコ ード セット変換を実行します。詳しくは、30 ページの『コード セット変換の実 行』を参照してください。 ロケールは、日付、時刻、数値、および通貨データのフォーマットも定義します。 LOAD FROM ファイル内の列値には、クライアント ロケールのサポートするどの フォーマットも適用できます。たとえば、あるフランス語ロケールで、3 桁区切り 記号として空白を使用し、小数点記号としてカンマを使用する通貨値を定義してい る可能性があります。このロケールを使用するときには、金額 (MONEY) 型列の次 のリテラル値が LOAD FROM ファイル内で有効になります。 3 411,99 日付および通貨データには代替フォーマットを指定できます。該当する環境変数を 設定する場合、LOAD FROM ファイルは日付 (DATE) 型列値、日時 (DATETIME) 型列値、および金額 (MONEY) 型列値の代替エンド ユーザ フォーマットを使用で きます。詳しくは、34 ページの『日時エンド ユーザ フォーマットのカスタマイ ズ』と 36 ページの『通貨値のカスタマイズ』を参照してください。 データベースからのデータのアンロード UNLOAD 文は、SELECT 文が抽出した行をオペレーティング システム ファイル に書き込みます。このオペレーティング システム ファイルは UNLOAD TO ファ イルと呼ばれます。このファイル内のデータ値には、クライアント コード セット が定義する文字が含まれます。クライアント ロケールがマルチバイト コード セッ トをサポートしている場合、コード セットからのマルチバイト文字をデータに入れ ることができます。 クライアント コード セットと異なるがクライアント コード セットに変換可能な コード セットをデータベース ロケールがサポートしている場合、クライアントは データを UNLOAD TO ファイルに書き込む前にそのデータに対してコード セット 変換を実行します。 (詳しくは、30 ページの『コード セット変換の実行』を参照 してください。) あるデータ型の UNLOAD TO ファイル内の出力フォーマットは、クライアント ロ ケールおよび環境変数によって決定されます。これらのデータ型には、日付 (DATE) 型値、金額 (MONEY) 型値、数値データ型の値、および日時 (DATETIME) 型値が含まれます。詳しくは、12 ページの『エンド ユーザ フォーマット』と 34 ページの『エンド ユーザ フォーマットのカスタマイズ』を参照してください。 重要: UNLOAD 文が生成した UNLOAD TO ファイルを、別の表またはデータベー スをロードする LOAD 文の入力ファイル (LOAD FROM ファイル) として 使用できます。 UNLOAD TO ファイルをこの方法で使用するときには、 LOAD を実行するときのすべての環境変数とクライアント ロケールの値が、 UNLOAD を実行したときと同じであることを確認してください。 100 IBM Informix GLS: ユーザーズ ガイド 外部表を使用したロード (XPS のみ) Extended Parallel Server のハイパフォーマンス並列ロードおよびアンロードでは、 外部表 を使用します。 DB–Access で発行できるか、ESQL/C に埋め込むことがで きる、一連の拡張 SQL 文が使用されます。 ハイパフォーマンス ローダ (HPL) は、さまざまなソースから表をロードするため の拡張サポートを提供し、さまざまなデータ形式変換を実行します。フィールドお よびレコード区切り記号内の非 ASCII 文字もサポートされます。ハイパフォーマン ス ロードは、非 ASCII 文字のサポートを必要とする可能性のある以下のような操 作を実行します。 v Informix データ形式を使用してデータ ファイルをプラットフォーム間で転送しま す v メインフレームからデータ ウェアハウスに操作データを転送します v データベース サーバを使用して、区切り記号付き ASCII、固定 ASCII、 EBCDIC、および Informix 内部 (ロウ) 表現の間でデータを変換します。 v SQL の INSERT 文と SELECT 文を使用して、データベース表内の新しい列への データのマッピングを指定します 非デフォルト ロケールの場合、CREATE EXTERNAL TABLE...USING、INSERT INTO...SELECT、および SELECT...INTO EXTERNAL table-name USING などの、 ローダ用の拡張 SQL 文は、非 ASCII 文字を使用できる識別子をサポートしていま す。 Extended Parallel Server の識別子に関する詳細については、63 ページの『識 別子内の非 ASCII 文字』を参照してください。 外部表を使用したシンプル ラージ オブジェクトのロード (XPS の み) Extended Parallel Server は、シンプル ラージ オブジェクトをロードおよびアンロ ードするための外部表をサポートしています。シンプル ラージ オブジェクト (テ キスト (TEXT) 型列またはバイト (BYTE) 型列) は、区切りおよび INFORMIX フ ォーマット外部表によってのみサポートされます。区切りフォーマットでは、シン プル ラージ オブジェクト列はテキストまたは 16 進エンコードのどちらかで表す ことができます。テキスト エンコードでは、シンプル ラージ オブジェクトは現状 のままデータ ファイルに書き込まれます。円記号と区切り記号はエスケープされま す。 16 進エンコードでは、シンプル ラージ オブジェクト内の各データ バイトが 2 つの 16 進数字 (0 から 9 まで、A から F まで、およびすべての標準 ASCII 文 字) によって表現されます。シンプル ラージ オブジェクト内の印刷不可能文字 は、変更されずにデータ ファイル内に入れられます。 シンプル ラージ オブジェクト列を外部表に定義する方法に関する詳細について は、「IBM Informix: SQL ガイド: 構文」内の CREATE EXTERNAL TABLE 文の 説明を参照してください。外部表を使用したロードについてのステップバイステッ プの手順と、ファイル形式およびパフォーマンスに関する考慮事項の詳細について は、「IBM Informix: Administrator’s Reference」を参照してください。 エスケープ文字の指定: エスケープ文字を指定して、シンプル ラージ オブジェク ト内の不完全または無効なマルチバイト文字データの認識をデータベース サーバに 第 3 章 SQL 機能 101 指示できます。エスケープ文字を指定しない場合、データベース サーバはロード中 に埋込み特殊文字についてテキスト ベース データ ファイル内の文字フィールドを 検査しません。 エスケープ文字を指定すると、そうでない場合に文字がロードおよびアンロード プ ロセスにとって特別な意味を持つかどうかにかかわらず、円記号 (¥) がそれぞれの 文字の前に置かれて実際の文字のオカレンスを示します。たとえば、「¥|」は列分離 記号ではなくリテラルな「|」文字として解釈されます。 アンロードでは、データベース サーバは区切り記号と円記号 (¥) をエスケープしま す。ロードでは、円記号の直後の文字は表示されたとおりの文字として解釈されま す。テキスト (TEXT) 型列値の場合、印刷不可能文字はデータ ファイル内に直接埋 め込まれます。 区切り記号の定義: シンプル ラージ オブジェクト データ値は、フィールド区切 り記号の間の、テキスト (TEXT) 型列またはバイト (Byte) 型列が定義されているポ イントのレコードに直接挿入されます。 ユーザ定義区切り記号はそれぞれ 1 バイトに限定されています。このため、マルチ バイト ロケールでは、厳密に 1 バイトの長さの文字のみを区切り記号として定義 できます。シングルバイト ロケールとマルチバイト ロケールの両方で、シンプル ラージ オブジェクトは常にバイト単位でトラバースされます。バイトが区切り記号 の 1 つまたは円記号に一致した場合、それはアンロードでエスケープされます。ロ ードでは、円記号の直後のバイトのみがエスケープされ、その円記号の後の (マル チバイトの可能性のある) 文字はエスケープされません。 区切り記号付きシンプル ラージ オブジェクト データのトラバースはすべてのロケ ールでバイト単位で実行されます。シンプル ラージ オブジェクトには常に有効な テキストが含まれているとは限らず、不完全または無効なマルチバイト文字が含ま れている可能性があるため、シンプル ラージ オブジェクトは (マルチバイトの可 能性のある) 文字単位ではトラバースされません。文字型列とは異なり、シンプル ラージ オブジェクトでの空白の埋込みまたは切捨ては、無効なマルチバイト文字の ためのオプションではありません。シンプル ラージ オブジェクト内のデータへの ランダム アクセスは不可能であり、シンプル ラージ オブジェクトはどのような方 法によっても変更できません。 重要: データベース サーバは、ロードまたはアンロード プロセスでシンプル ラー ジ オブジェクト データ内の不完全または無効なマルチバイト文字を検出し ません。マルチバイト データを文字型列にロードする前に、そのデータが一 貫しており正確であることを確認する必要があります。 102 IBM Informix GLS: ユーザーズ ガイド 第 4 章 データベース サーバの機能 本章の概要 . . . . . . . . . . . . . Informix データベース サーバによる GLS サポー ト . . . . . . . . . . . . . . . . データベース サーバ コード セット変換 . . データベース サーバが変換するデータ . . . ユーティリティに対するロケール特有のサポート データベース サーバ ユーティリティの非 ASCII 文字 . . . . . . . . . . . . SQL ユーティリティの非 ASCII 文字 . . . C ユーザ定義ルーチンのロケール サポート (IDS および DB API のみ) . . . . . . . . . UDR の現行処理ロケール . . . . . . . ソース コードの非 ASCII 文字 . . . . . C 言語文では . . . . . . . . . . SQL 文では . . . . . . . . . . . 文字データのコピー . . . . . . . . . IBM Informix GLS ライブラリ . . . . . IBM Informix GLS による文字処理 . . . ワイド文字データ型の互換性 . . . . . . 103 . 103 . 105 . 105 106 . 107 . 107 . . . . . . . . . 108 108 109 109 109 110 110 110 111 コード セット変換と DataBlade API. . . . . UDR 内の文字列 . . . . . . . . . . 不透明 (OPAQUE) 型サポート関数の文字列 ロケール特有のデータ フォーマット . . . . 各国対応例外メッセージ. . . . . . . . . カスタマイズされた例外メッセージの挿入 C UDR からのローカライズされた例外メッ セージの挿入 . . . . . . . . . . . カスタマイズされたメッセージの検索 . . . パラメータ マーカの指定 . . . . . . . 各国対応トレース メッセージ . . . . . . . systracemsgs システム カタログ表へのメッセ ージの挿入 . . . . . . . . . . . . コードへの各国対応トレース メッセージの書 き込み. . . . . . . . . . . . . . トレース メッセージの検索 . . . . . . 不透明 (opaque) 型でロケールを区別するデータ 各国対応入出力サポート関数 . . . . . . 各国対応送受信サポート関数 . . . . . . 111 111 112 113 113 114 115 116 117 117 117 118 120 120 120 121 本章の概要 本章では、GLS 機能がデータベース サーバにどのような影響を及ぼすかについて 説明します。本章では、主に次のトピックについて説明します。 v データベース サーバがアクセスできるオペレーティング システム ファイル v データベース サーバがコード セット変換を使用する場合 v GLS 機能をサポートするデータベース サーバ ユーティリティ これらのデータベース サーバ機能について詳しくは、「IBM Informix: Administrator’s Guide」を参照してください。データベース サーバ ユーティリティ について詳しくは、「IBM Informix: Administrator’s Reference」を参照してくださ い。異なる Informix データベース サーバへのマイグレーションについては、 「IBM Informix: 移行ガイド」を参照してください。 Informix データベース サーバによる GLS サポート データベース サーバは、次のオペレーティング システム ファイルに対して読取り および書込み操作を実行できます。 v 診断ファイル 診断ファイルには次のファイルが含まれます。 – af.xxx – shmem.xxx UNIX のみ © Copyright IBM Corp. 1996, 2003 103 – gcore.xxx UNIX のみ の終り – コア 次の構成パラメータを 1 つ以上設定すると、データベース サーバが診断ファイ ルを生成します。 UNIX のみ – DUMPDIR – DUMPSHMEM – DUMPCNT – DUMPCORE – DUMPGCORE UNIX のみ の終り v メッセージ ログ ファイル MSGPATH 構成パラメータを設定すると、データベース サーバがユーザ指定の メッセージ ログ ファイルを生成します。 これらのオペレーティング システム ファイルは、データベース サーバのあるサー バ コンピュータにあります。データベース サーバがこれらのファイルに対して読 取りまたは書込みを行うときは、サーバ コンピュータがサポートするコード セッ トを使用する必要があります。データベース サーバは、このコード セットをサー バ ロケールから取得します。 SERVER_LOCALE 環境変数を使用してサーバ ロケールを設定します。 SERVER_LOCALE を設定しない場合、データベース サーバはサーバ ロケールと してデフォルト ロケールを使用します。詳細については、58 ページの 『SERVER_LOCALE』を参照してください。 Extended Parallel Server Extended Parallel Server に関しては、すべてのコサーバが同一の GLS オペレーテ ィング システム環境を使用している必要があります。 Extended Parallel Server の終り コード セット変換を実行して、オペレーティング システム ファイルに対する読取 りおよび書込み操作に関連する非 ASCII 文字を処理するために、データベース サ ーバはデータベース サーバ コード セット (データベース サーバ ロケールがサポ ートするコード セット) を判別します。非 ASCII 文字の使用の詳細については、 63 ページの『識別子内の非 ASCII 文字』を参照してください。 104 IBM Informix GLS: ユーザーズ ガイド データベース サーバ コード セット変換 本節では、データベース サーバが実行するコード セット変換について要約しま す。コード セット変換に関する一般情報については、30 ページの『コード セット 変換の実行』を参照してください。 Informix データベース サーバは次の条件が真のとき、サーバ処理ロケールとサーバ ロケール間で自動的にコード セット変換を実行します。 v CLIENT_LOCALE、DB_LOCALE、および SERVER_LOCALE 環境変数が、サ ーバ処理ロケールとサーバ ロケールのコード セットが異なるように設定されて いる。 v サーバ処理ロケールとサーバ ロケールのコード セット間に有効なコード セット 変換が存在する。 Informix データベース サーバがコード セット変換を実行するファイルのリストに ついては、103 ページの『Informix データベース サーバによる GLS サポート』を 参照してください。 GLS コード セット変換ファイルについては、160 ページの 『コード セット変換ファイル』を参照してください。 データベース サーバがオペレーティング システム ファイルを作成すると、サーバ ロケール (サーバ コード セット) のコード セットでファイル名と書込みファイル の内容が生成されます。このファイルにアクセスする必要のある IBM Informix 製 品またはクライアント アプリケーションは、この同じサーバ コード セットをサポ ートするサーバ処理ロケールを持っている必要があります。サーバ処理ロケールが これらの非 ASCII 文字を持つコード セットをサポートするように、適切な CLIENT_LOCALE、DB_LOCALE、および SERVER_LOCALE 環境変数を設定す る必要があります。サーバ処理ロケールについて詳しくは、27 ページの『サーバ処 理ロケールの決定』を参照してください。 データベース サーバは、ファイル名を参照する前にサーバ処理ロケールに関してフ ァイル名の妥当性を検査します。 Extended Parallel Server Extended Parallel Server は、非 ASCII 英数字 7 ビットでない文字を含むファイル 名を拒否します。 Extended Parallel Server の終り データベース サーバが変換するデータ データベース サーバがデータをそのオペレーティング システム ファイルとの間で 相互に転送するとき、データベース サーバはサーバ処理ロケールとサーバ ロケー ルのコード セットの相違を次のように処理します。 v これらの 2 つのコード セットが同一の場合、データベース サーバは、サーバ ロケールのコード セットのオペレーティング システム ファイルを読み取るか、 またはそこに書き込みます。 第 4 章 データベース サーバの機能 105 v これらの 2 つのコード セットが異なり、それらの間に Informix コード セット 変換が存在する場合、データベース サーバは、そのオペレーティング システム ファイルの読取り、または書込みを行うときに自動的にコード セット変換を実行 します。 コード セットの相違を解決するコード セット変換では、サーバ ロケールは、デ ータベース サーバがファイルを作成するために使用した実際のコード セットを サポートする必要があります。詳しくは、47 ページの『製品により同じコード セットがサポートされていることの確認』を参照してください。 v これらの 2 つのコード セットが異なるが、Informix コード セット変換が存在し ない場合、データベース サーバはコード セット変換を実行できません。 データベース サーバがコード セット変換が存在しないオペレーティング システ ム ファイルの書込みまたは読取りを行う場合、データベース サーバはサーバ処 理ロケールのコード セットを使用して読取りまたは書込み操作を実行します。 ユーティリティに対するロケール特有のサポート 本節では、GLS 機能の使用に特有の情報についてデータベース サーバ ユーティリ ティごとに説明します。ユーティリティの詳細な説明については、「IBM Informix: Administrator’s Reference」を参照してください。 監査用のデータベース サーバ ユーティリティについては、「IBM Informix: Trusted Facility Guide」を参照してください。 データベース サーバ ユーティリティと SQL ユーティリティは、データ ベース サーバのインスタンスからの情報を要求するクライアント アプリケーションです。 このため、これらのユーティリティは、CLIENT_LOCALE、DB_LOCALE、および SERVER_LOCALE 環境変数を使用して、次のように非デフォルトのロケールの名 前を取得します。 v データベース ユーティリティが非デフォルト コード セットを使用して入力 (コ マンド行引数を含む) を受け入れる、または出力を生成する場合、 CLIENT_LOCALE 環境変数を設定する必要があります。 v データベース ユーティリティが非デフォルト ロケールを持つデータベースにア クセスする場合、DB_LOCALE 環境変数を設定する必要があります。 v データベース ユーティリティにより、データベース サーバが非デフォルト コー ド セットを持つサーバ コンピュータにデータを書き込む場合、 SERVER_LOCALE 環境変数を設定する必要があります。 また、データベースおよびクライアント ロケールが互換性のあるコード セットを サポートする場合、これらのユーティリティはコード セット変換を実行します。コ ード セット変換について詳しくは、30 ページの『コード セット変換の実行』を参 照してください。 Windows のみ ロケール環境変数の変更は、HKEY_LOCAL_MACHINE の下の Windows レジスト リ データベースにも反映されなければなりません。 Windows のみ の終り 106 IBM Informix GLS: ユーザーズ ガイド データベース サーバ ユーティリティの非 ASCII 文字 多くのデータベース サーバ ユーティリティは、コマンド行引数の非 ASCII 文字を サポートします。これらのユーティリティはクライアント コード セット (CLIENT_LOCALE で定義する) のすべてのコマンド行引数を解釈します。 次の表は、コマンド行引数の非 ASCII 文字を受け入れるユーティリティ、または非 ASCII 出力を生成するユーティリティを示します。 ユーティリティ名 コマンド行引数の非 ASCII 文字 非 ASCII 出力 onaudit (IDS) -f input_file あり oncheck (IDS) -cc -pc database-ci -cI -pk -pK -pl -pL database:table#index_name-ci -cI -pk -pK -pl -pL -cd -cD -pB -pt -pT -pd -pD -pp database:table あり onload (IDS) database:table-i old_index new_index-t tape_device あり onlog (IDS) -d tape_device onpload (IDS) -d source-j jobname-p projectname あり onshowaudit -f input_file -s server_name あり onspaces (IDS) -p pathname-f filename onstat -o filename -dest (IDS)filename_source (IDS)None (XPS) あり onunload (IDS) database:table-t tape_device あり onutil (XPS) CHECK TABLE DATA database:owner:tableCHECK TABLE あり INFO database:owner:table Extended Parallel Server Extended Parallel Server コントロール ユーティリティ xctl を使用して、onstat な ど、その他のデータベース サーバ ユーティリティを実行できます。 Extended Parallel Server の終り SQL ユーティリティの非 ASCII 文字 次の SQL ユーティリティも、コマンド行引数の非 ASCII 文字を受け入れ、クライ アント コード セットの出力を生成します。 v chkenv v dbexport v dbimport v dbload v dbschema 第 4 章 データベース サーバの機能 107 chkenv ユーティリティの説明については、「IBM Informix: SQL ガイド: 参照」を 参照してください。 dbload、dbschema、dbexport、および dbimport ユーティ リティの説明については、「IBM Informix: 移行ガイド」を参照してください。 DB–Access については、「IBM Informix: DB-Access ユーザーズ ガイド」を参照し てください。 DB–Access ユーティリティは、クライアント ロケールのコード セットでラベルと メッセージを生成します。 Extended Parallel Server Extended Parallel Server の場合、DB–Access は、database と script_file のマルチバ イト コマンド行引数を受け入れます。 Extended Parallel Server の終り C ユーザ定義ルーチンのロケール サポート (IDS および DB API のみ) Dynamic Server を使用すると、C プログラミング言語で書かれたユーザ定義ルーチ ン (UDR) を作成できます。これらの C UDR は、DataBlade API を使用してデー タベース サーバと通信します。 DataBlade API の詳細な説明については、 「IBM Informix: DataBlade API Programmer’s Guide」を参照してください。本節で は、C UDR の国際化 の方法について説明します。 国際化とは、さまざまな言語、地域、およびコード セットをそのコードを変更した り再コンパイルしたりせずにサポートできるユーザ定義ルーチン (UDR) を作成する プロセスです。国際化の詳細な説明については、「IBM Informix: GLS Programmer’s Manual」を参照してください。 各国対応の C UDR は、次の GLS 考慮事項を処理する必要があります。 v UDR がソース コード内で非 ASCII 文字を使用できる場所。 v 文字データをコピーするときに、C UDR が実行する必要のある手順。 v UDR が GLS ロケールにアクセスする方法。 v UDR がコード セット変換を行う方法。 v UDR がロケール特有のエンド ユーザ フォーマットを処理する方法。 v UDR が各国対応例外メッセージにアクセスする方法。 v UDR が各国対応トレース メッセージにアクセスする方法。 v 不透明 (OPAQUE) 型サポート関数が、ロケールを区別するデータを処理する方 法。 UDR の現行処理ロケール データベースにアクセスするために、クライアント アプリケーションはまずデータ ベース サーバへの接続を要求します。データベース サーバは指定されたデータベ ースにそのクライアント アプリケーションがアクセスできるかどうかを検証し、ク ライアントとデータベースとの間の接続を確立しなければなりません。このプロセ スで、データベース サーバはサーバ処理ロケールを確立して接続の期間を使用しま す。クライアント アプリケーションが UDR を実行するとき、この UDR は、サー 108 IBM Informix GLS: ユーザーズ ガイド バ処理ロケールに関連してそのサーバ コンピュータで実行されます。このロケール は、現行処理ロケール と呼ばれることがあります。 多くのユーザ定義ルーチンは本来 ASCII データ用に書かれたものでも、非 ASCII データを正しく処理します。ただし、実行に異常をきたすルーチンもあります。ご 使用の C UDR を国際化するには、ご使用の UDR が任意の GLS 関連操作でサー バ処理ロケールを処理することを確認する必要があります。 UDR がサーバ処理ロ ケールを正しくサポートしない場合、ルーチンは予期しない結果またはエラー メッ セージを戻す場合があります。 ソース コードの非 ASCII 文字 非 ASCII 文字は、C-UDR ソース ファイルの次のコンテキストにある場合がありま す。 v C 言語文の、変数宣言や if 文など v mi_exec( ) または mi_exec_prepared_statement( ) 関数によってサーバに送 信される SQL 文 C 言語文では C コンパイラは、ご使用の C 言語文で使用するコード セットを認識する必要があ ります。ご使用の C コンパイラの機能によって、UDR ソース ファイルの C 言語 文内で非 ASCII 文字を使用できる程度が制限されます。たとえば、リテラルまたは コメント内でしかマルチバイト文字をサポートしない C 言語コンパイラもありま す。 C コンパイラが非 ASCII 文字を完全にはサポートしない場合、これらの文字を含む UDR を正常にコンパイルできない場合があります。特に、次の状態では UDR のコ ンパイルに影響がある場合があります。 v マルチバイト文字が C 言語トークンを含む可能性がある。 マルチバイト文字のコンポーネントが、パーセント (%)、カンマ、円記号 (¥)、お よび二重引用符 (″) のようなシングルバイト文字と区別できない場合がありま す。引用符付き文字列にそのような文字が存在する場合、C コンパイラはそれら の文字を C 言語トークンとして解釈します。これは、コンパイル エラーまたは 文字を失う結果になる可能性があります。 v C コンパイラが 8 ビット透過でない可能性がある。 コード セットが非 ASCII 文字 (コード値が 127 より大きい) を含む場合、C コ ンパイラは文字を解釈するために 8 ビット透過でなければなりません。 8 ビッ ト透過になるには、コンパイラはコード値の一部として 8 ビットを読み取る必要 があります。すなわち、この 8 ビットの意味を無視したり、これについて独自の 解釈を行ってはいけません。 ヒント: C コンパイラは、ご使用の C UDR 内の DataBlade API 関数の名前を解釈 できるように設定された ASCII コードも認識する必要があります。 SQL 文では C UDR で、SQL 文は mi_exec( ) および mi_prepare( ) 関数に対するリテラル 文字列として使用されます。 C コンパイラはこれらのリテラル文字列を構文解析し ません。そのため、これらの SQL 文にある文字のコード セットを認識する必要が ありません。 第 4 章 データベース サーバの機能 109 C ソース ファイル内では、次のオブジェクトについて SQL 文の中で非 ASCII 文 字を使用できます。 v データベース、表、列、ビュー、制約、PREPARE 文で処理された文、およびカ ーソルなど、SQL 識別子の名前 詳しくは、62 ページの『データベース オブジェクトの命名』を参照してくださ い。 v リテラル文字列 たとえば、UDR では、マルチバイト文字を次のように使用できます。 mi_exec(conn, "insert into tbl1 (nchr1) values ’A1A2B1B2’", 0); v ファイル名とパス名。ただし、ご使用のオペレーティング システムがファイル名 およびパス名のマルチバイト文字をサポートする場合。 重要: SQL 文で非 ASCII 文字を使用するには、サーバ処理ロケールに、これらの 文字をサポートするコード セット、または文字コード セットと互換性のあ るコード セットが含まれている必要があります。コード セット変換の実行 方法については、111 ページの『UDR 内の文字列』を参照してください。 文字データのコピー データをコピーするとき、バッファのサイズがデータを保持するために十分である ことを確認する必要があります。デスティネーション バッファのサイズがソース バッファ内のマルチバイト データ用として不十分な場合、データがコピー中に切り 捨てられる可能性があります。たとえば、次の C コード フラグメントはマルチバ イト データ A1A2A3B1B2B3 を、buf1 から buf2 にコピーします。 char buf1[20], buf2[5]; ... stcopy("A1A2A3B1B2B3", buf1); ... stcopy(buf1, buf2); buf2 はマルチバイト文字列を保持するのに十分な大きさがないため、コピーでは文 字列が A1A2A3B1B2 に切り捨てられます。この状態を回避するために、DataBlade API モジュールがコピーを実行する前にマルチバイト文字列がバッファに収まるこ とを確認してください。 IBM Informix GLS ライブラリ IBM Informix GLS ライブラリはアプリケーション プログラム インターフェイス (API) で、これによりユーザ定義ルーチンおよび DataBlade モジュールの開発者は 各国対応アプリケーションを作成できます。 IBM Informix GLS による文字処理 IBM Informix GLS のマクロおよび関数は、DataBlade API モジュール内で、文化的 差異に基づいた情報に関して GLS ロケールにアクセスできるようにします。この ライブラリには、次の機能を持つ関数が含まれます。 v シングルバイトおよびマルチバイト文字の処理 v 日付、時刻、および数値データのロケール特有の形式へのフォーマット 110 IBM Informix GLS: ユーザーズ ガイド IBM Informix GLS ライブラリと、それを DataBlade API モジュールで使用する方 法について詳しくは、「IBM Informix: GLS Programmer’s Manual」を参照してくだ さい。ペーパー マニュアルをお持ちでない場合、 http://www-3.ibm.com/software/data/informix/pubs/library/ でオンライン マニュ アルを表示できます。 ワイド文字データ型の互換性 ワイド文字 データ型は、マルチバイト文字を処理するための代替フォームです。コ ード セットのワイド文字フォームでは、各マルチバイト文字のサイズが正規化され るため、それぞれの文字のサイズは同じです。レガシー DataBlade API モジュール は、次データ型のうち任意のものを使用してワイド文字を保持する場合がありま す。 ワイド文字 データ型 mi_wchar wchar_t 説明 欠点 現在、すべてのシステムで符号な し short 型として定義されている レガシー DataBlade API データ型 プラットフォーム固有のオペレー ティング システム データ型 DataBlade API は、mi_wchar 値を操 作するワイド文字関数を提供しませ ん。 オペレーティング システムは、 wchar_t 値を操作するワイド文字関 数を提供します。これらの関数の使用 法は、プラットフォーム固有です。 IBM Informix GLS ライブラリは、ワイド文字のサポート用に gl_wchar_t データ 型を提供します。また、IBM Informix GLS は、gl_wchar_t を操作するワイド文字 関数の独自のセットも提供します。 IBM Informix GLS ワイド文字関数を使用する と、アプリケーションがプラットフォームに依存しなくなり、ご使用の DataBlade API モジュール内で IBM Informix GLS ロケールへアクセスできるようになりま す。 IBM Informix GLS ライブラリは、gl_wchar_t と mi_wchar との間、または gl_wchar_t と wchar_t との間の変換を行う関数を提供しません。 DataBlade API モジュールが mi_wchar または wchar_t を使用し続け、さらに IBM Informix GLS ワイド文字処理も使用する必要がある場合、必要な変換を実行するコードを書 かなければなりません。 コード セット変換と DataBlade API UDR 内では DataBlade API はコード セット変換を自動的に実行することはありま せん。 C UDR は、次の状態でコード セット変換を実行する必要がある場合があり ます。 v SQL 文を含む文字列内 v 文字データを含む不透明 (OPAQUE) 型用の不透明 (OPAQUE) 型サポート関数 UDR 内の文字列 ご使用の C UDR にデータベース サーバに送信される文字列が含まれているとき は、これらの文字列に対して必須のコード セット変換を実行する必要があります。 このコード セット変換は、この文字列のコード セットと UDR が実行されるサー バ処理ロケールのコード セットとの差を処理しなければなりません。 第 4 章 データベース サーバの機能 111 たとえば、次の SELECT 文で、DataBlade API はマルチバイト表名 A1A2A3B1B2 に対するコード セット変換を実行しません。 mi_exec(conn, "SELECT * from A1A2A3B1B2", 0); UDR が、SQL 文の文字をサポートするコード セットを含まないサーバ処理ロケー ルで実行される場合、UDR は、サーバ処理ロケールと指定されたロケールのコード セット間で明示的にコード セット変換を実行できます。 DataBlade API は、このコード セット変換を支援する次の関数を提供します。 文字列に対するコード セット変換 DataBlade API 関数 指定された文字列に対して、指定されたロケールか らサーバ処理ロケールへのコード セット変換を実行 する 指定された文字列に対して、サーバ処理ロケールか ら指定されたロケールへのコード セット変換を実行 する mi_convert_from_codeset( ) mi_convert_to_codeset( ) これらの DataBlade API 関数について詳しくは、「IBM Informix: DataBlade API Programmer’s Guide」の関数参照で確認してください。 不透明 (OPAQUE) 型サポート関数の文字列 クライアント アプリケーションは、クライアントとの間で相互に転送される非不透 明型データのコード セット変換を実行しますが、データベース サーバは不透明 (opaque) 型の内部フォーマットを認識しません。このため、不透明 (opaque) 型につ いては、サーバ処理ロケールのコード セットにない文字列を明示的に変換する責任 は、サポート関数にあります。 次の不透明 (OPAQUE) 型サポート関数では、コード セット変換を実行する必要が ある場合があります。 v 入出力サポート関数。クライアント ロケールとサーバ処理ロケールのコード セ ット間で、不透明 (OPAQUE) 型の外部フォーマットを変換します。 v 送受信サポート関数。不透明 (OPAQUE) 型の内部構造で任意の文字フィールド を変換します。 ヒント: DataBlade Developer's Kit (DBDK) が不透明 (OPAQUE) 型入出力サポート 関数用に生成するコードは、非デフォルト ロケールの外部フォーマットを 処理します。 DataBlade API には、不透明 (opaque) 型のサポート関数でコード変換を行う次の関 数があります。 不透明 (opaque) 型のコード セット変換 DataBlade API 関数 文字列引数に対して、サーバ処理ロケールのコード セットか mi_put_string( ) らクライアント ロケールのコード セットへのコード セット 変換を実行する 文字列に対して、クライアント ロケールのコード セットから mi_get_string( ) サーバ処理ロケールのコード セットへのコード セット変換を 実行する 112 IBM Informix GLS: ユーザーズ ガイド これらの DataBlade API 関数の構文について詳しくは、「IBM Informix: DataBlade API Programmer’s Guide」の関数参照で確認してください。 ロケール特有のデータ フォーマット C UDR が日付、時刻、数値、または通貨データのエンド ユーザ フォーマットを含 む文字列を処理するとき、これらのエンド ユーザ フォーマットのロケール特有の フォーマットを処理するように UDR を作成する必要があります。 DataBlade API には、複数のデータ型の内部表現とそのエンド ユーザ フォーマットとの間での変 換を行う関数が備わっています。 次の DataBlade API 関数は、内部のデータベース値を、ロケール特有のエンド ユ ーザ フォーマットを使用する文字列に変換します。 DataBlade API 関数 説明 mi_date_to_string( ) ロケール特有のエンド ユーザ日付フォーマットを使用して 内部の日付 (DATE) 型値を同等の文字列に変換します。 ロケール特有のエンド ユーザ通貨フォーマットを使用して 内部の金額 (MONEY) 型値を同等の文字列に変換します。 ロケール特有のエンド ユーザ数値フォーマットを使用して 内部の 10 進数 (DECIMAL) 型値を同等の文字列に変換し ます。 mi_money_to_string( ) mi_decimal_to_string( ) 重要: mi_datetime_to_string( ) および mi_interval_to_string( ) 関数は、現行処 理ロケールの日付および時刻フォーマットの文字列をフォーマットしませ ん。ただし、それらの関数は、日付、時刻、または間隔文字列を、固定され た ANSI SQL フォーマットで作成します。 次の DataBlade API 関数はロケール特有のエンド ユーザ フォーマットの文字列を 解釈し、それを内部のデータベース値に変換します。 DataBlade API 関数 説明 mi_string_to_date( ) ロケール特有の日付エンド ユーザ フォーマットをその内 部日付 (DATE) 型フォーマットに変換します。 ロケール特有の通貨エンド ユーザ フォーマットをその内 部金額 (MONEY) 型フォーマットに変換します。 ロケール特有の数値エンド ユーザ フォーマットをその内 部 10 進数 (DECIMAL) 型フォーマットに変換します。 mi_string_to_money( ) mi_string_to_decimal( ) 重要: mi_string_to_datetime( ) および mi_string_to_interval( ) 関数は、現行処 理ロケールの日付および時刻フォーマットを解釈しません。ただし、それら の関数は、固定された ANSI SQL フォーマットの日付、時刻、または間隔文 字列を解釈します。 各国対応例外メッセージ DataBlade API 関数 mi_db_error_raise( ) は例外コールバックに例外メッセージを 送信します。このメッセージは次のいずれかです。 v リテラル メッセージ。mi_db_error_raise( ) への 3 番目の引数として指定する もの。 第 4 章 データベース サーバの機能 113 v SQLSTATE の値に関連付けられているカスタマイズされたメッセージ。 mi_db_error_raise( ) への 3 番目の引数として指定するもの。 mi_db_error_raise( ) 関数は、カスタマイズされたメッセージを含む例外を発生 させることがあります。DataBlade モジュールと UDR は、このメッセージを syserrors システム カタログ表に保管できます。 syserrors 表はこれらのメッ セージを 5 文字の SQLSTATE 値にマップします。 syserrors 表では、カスタ マイズされたメッセージのテキストとロケールを関連付けることができます。 mi_db_error_raise( ) のリテラル メッセージを指定する方法と、 mi_db_error_raise( ) のカスタマイズされたメッセージを指定する方法の一般情報 については、「IBM Informix: DataBlade API Programmer’s Guide」の例外およびイ ベントの処理方法に関する章を参照してください。 本節では、ロケール特有の例外メッセージの使用方法に関する次のタスクについて 説明します。 v ロケール特定の例外メッセージを syserrors システム カタログ表に追加する方 法 v カスタマイズされたメッセージのロケールの選択により、カスタマイズされたメ ッセージを mi_db_error_raise( ) が検索する方法にどのような影響が与えられ るか v 非 ASCII 文字を含むパラメータ マーカの指定方法 カスタマイズされた例外メッセージの挿入 カスタマイズされた状態コードとそれに関連するメッセージを syserrors システム カタログ表に保管できます。カスタマイズされた例外メッセージを作成するには、 syserrors 表に行を直接挿入します。 syserrors 表には、各国対応例外メッセージ 用に次の列があります。 列名 説明 sqlstate 例外に関連付けられた SQLSTATE 値。次の問合せを使用して syserrors にある SQLSTATE メッセージ文字列の現行リスト を判別できます。 SELECT sqlstate, locale, message FROM syserrors ORDER BY sqlstate, locale message locale 114 IBM Informix GLS: ユーザーズ ガイド SQLSTATE 値の決定方法について詳しくは、「IBM Informix: DataBlade API Programmer’s Guide」を参照してください。 ターゲット ロケールのコード セットの文字を含む例外メッセー ジのテキスト。規則により、メッセージに改行文字を組み込んで はいけません。 例外メッセージが使用されるロケール。locale 列は、エラーおよ び警告メッセージの国際化で使用される言語およびコード セッ トを識別します。この名前は、メッセージ テキストのターゲッ ト ロケールの名前です。 syserrors システム カタログ表の詳細について詳しくは、「IBM Informix: SQL ガ イド: 参照」のシステム カタログについて説明した章を参照してください。 syserrors にテキストを挿入するときは、コード セット変換を有効にしないでくだ さい。 クライアント ロケールとデータベース ロケールのコード セットが異なる場合、ク ライアント環境の CLIENT_LOCALE 変数と DB_LOCALE 環境変数の両方を一時 的にデータベース ロケールの名前に設定します。この予備手段により、クライアン ト アプリケーションはコード セット変換を実行しません。 メッセージ テキストにパラメータを指定する場合、パラメータ名がすべての ロケ ールで同じになるように、パラメータ名には ASCII 文字のみを使用してください。 多くのコード セットは ASCII 文字を含みます。たとえば、次の INSERT 文は、 SQLSTATE 値が ″03I01″ の syserrors に新しいメッセージを挿入します。 INSERT INTO syserrors VALUES ("03I01", "en_us.8859-1", 0, 1, "Operation Interrupted.") INSERT INTO syserrors VALUES ("03I01", "fr_ca.8859-1", 0, 1, "Traitement Interrompu.") これで、’03I01’ SQLSTATE 値は 2 つのロケール特有メッセージを持ちます。デ ータベース サーバは、実行するときに UDR のサーバ処理ロケールに基づいて適切 なメッセージを選択します。 mi_db_error_raise( ) が例外メッセージを見つける 方法について詳しくは、116 ページの『カスタマイズされたメッセージの検索』を 参照してください。 C UDR からのローカライズされた例外メッセージの挿入 前の節で説明したように、ユーザ定義ルーチン (UDR) 内で発生する例外に対するメ ッセージを mi_db_error_raise( ) によって作成するとき、メッセージ テキストの ロケールはサーバ処理ロケールと一致している必要があります。これらのロケール が異なる場合、SQL スクリプトまたは mi_exec( ) 関数を呼び出す C UDR を使用 してメッセージを挿入することは確実ではありません。なぜなら、SQL パーサが、 認識しない文字を見つけたときに例外を発行するためです。この制約を回避するた めに、INSERT 文 (mi_prepare( ) を指定した) を PREPARE 文で処理してエラー メッセージをロードする UDR を使用できます。 v SQLSTATE 値とエラー メッセージ テキストで位置指定子 (「?」記号) を使用 します。これらの値は、syserrors システム カタログ表の最初と最後の列 (それ ぞれ sqlstate と message) にあります。 v メッセージ テキストが使用するロケールの名前をハードコーディングします。ロ ケール名は、syserrors の第 2 列 (locale) にあります。 たとえば、次の行は UNIX システムで、デフォルト ロケール (en_us) のメッセー ジの INSERT 文を PREPARE 文で処理します。 stmt = mi_prepare(conn, "insert into syserrors (?, ’en_us.8859-1’, 0, 1, ?)", NULL); この文を実行するとき、位置指定子 (sqlstate と message) に値を指定し、次に mi_exec_prepared_statement( ) 関数を使用して PREPARE 文で処理された INSERT 文をデータベース サーバに送信する必要があります。 第 4 章 データベース サーバの機能 115 次の UDR コードは、SQLSTATE 値とそれに関連するメッセージ テキストを保持 するために、メッセージ配列 (enus_msg) を使用しています。このコードは、この メッセージ配列の各要素に関する情報を、mi_exec_prepared_statement( ) 関数の 適切な位置指定子配列 (args、lens、nulls、および types) に書き込みます。 #include <stdio.h> #include <string.h> #include "mi.h" #define MAX_MSG 3 char *enus_msg[MAX_MSG][2] = { "XT010", "First error message for insertion", "XT020", "Second error message for insertion", "XT030", "Third error message for insertion" }; /* * Title: gls_insert_enus * Purpose: Add localized messages to ’syserrors’ system error table * for given locale, independent of session locale setting. */ mi_integer gls_insert_enus() { MI_DATUM args[2]; /* pointers to column values */ mi_integer lens[2]; /* lengths of column values */ mi_integer nulls[2]; /* null capability of columns */ mi_string *types[2]; /* types of columns */ mi_integer i; MI_STATEMENT *stmt; MI_CONNECTION *conn = mi_open(NULL, NULL, NULL); /* * Prepare statement using placeholder values for sqlstate and message * columns and fixed values for locale, level, and seqno columns. */ stmt = mi_prepare(conn, "insert into syserrors values(?,’en_us.8859-1’,0,1,?)", NULL); for (i=0; i<MAX_MSG; i++) /* Loop through message array */ { args[0] = (MI_DATUM)enus_msg[i][0]; /* Set pointer to sqlstate string */ lens[0] = strlen(args[0]); /* Set length of sqlstate string */ nulls[0] = MI_FALSE; /* Set null handling capability */ types[0] = "char(5)"; /* Set sqlstate column type */ args[1] = (MI_DATUM)enus_msg[i][1]; /* Set pointer to message string */ lens[1] = strlen(args[1]); /* Set length of message string */ nulls[1] = MI_FALSE; /* Set null handling capability */ types[1] = "varchar(255)"; /* Set message column type */ mi_exec_prepared_statement(stmt,0,0,2,args,lens,nulls,types,NULL,NULL); } mi_close(conn); return 0; } PREPARE 文で処理された文の実行と、syserrors システム カタログ表へのカスタ マイズされたメッセージの追加方法については、「IBM Informix: DataBlade API Programmer’s Guide」を参照してください。 カスタマイズされたメッセージの検索 mi_db_error_raise( ) 関数は syserrors システム カタログ表の検索を開始する と、ロケールのすべてのコンポーネント (言語、地域、コード セット、およびオプ ションの修飾子) が現行処理ロケール内と syserrors の locale 列で同一であるメ ッセージを要求します。 116 IBM Informix GLS: ユーザーズ ガイド デフォルト ロケールを使用する C UDR では、現行処理ロケールは U.S. English (en_us) です。現行処理ロケールが U.S. English のとき、mi_db_error_raise( ) は U.S. English ロケールを使用するメッセージのみ を検索します。ただし、デフォル トでないロケールを使用する C UDR では、現行処理ロケールはサーバ処理ロケー ルです。 mi_db_error_raise( ) が syserrors システム カタログ表のメッセージを検索する 方法については、「IBM Informix: DataBlade API Programmer’s Guide」の例外に関 する章を参照してください。 パラメータ マーカの指定 syserrors システム カタログ表のカスタマイズされたメッセージは、パラメータ マーカ を含むことができます。これらのパラメータ マーカは、(たとえば %TOKEN% のように) 両端を 1 つのパーセント (%) 記号で囲んだ文字列です。パ ラメータ マーカは、mi_db_error_raise( ) 関数が値を提供できる変数として扱わ れます。 mi_db_error_raise( ) 関数は、ユーザが指定したメッセージ テキストま たはメッセージ パラメータ文字列がサーバ処理ロケールにあると仮定します。カス タマイズされたメッセージにパラメータ マーカを指定する方法の詳細な説明につい ては、「IBM Informix: DataBlade API Programmer’s Guide」を参照してください。 各国対応トレース メッセージ API は特定のロケールに対応するトレース メッセージをサポートします。現行のデ ータベース ロケールが、トレース メッセージが使用するコード セットを決定しま す。現行のデータベース ロケールに基づいて、指定されたトレースポイントは各国 対応トレース メッセージを作成できます。各国対応トレースを使用して、同じコー ドを多くのさまざまなロケールで開発およびテストできます。 各国対応トレース サポートを提供するために、API は次の機能を備えています。 v systracemsgs システム カタログ表は、各国対応トレース メッセージを保管し ます。 v 2 つの各国対応トレース関数 gl_dprintf( ) と gl_tprintf( ) は、各国対応トレー ス メッセージをフォーマットします。 systracemsgs システム カタログ表へのメッセージの挿入 systracemsgs システム カタログ表は、C UDR のデバッグに使用できる各国対応 トレース メッセージを保管します。各国対応トレース メッセージを作成するに は、行を systracemsgs 表に直接挿入します。 systracemsgs 表は、それぞれの各国対応トレース メッセージについて説明しま す。 列名 説明 name locale message トレース メッセージの名前 トレース メッセージが使用されるロケール トレース メッセージのテキスト メッセージ名とロケールの組み合せは、表内で一意でなければなりません。新しい トレース クラスが systracemsgs に挿入されると、データベース サーバはそのト 第 4 章 データベース サーバの機能 117 レース クラスにトレース メッセージ ID と呼ばれる固有 ID を割り当てます。デ ータベース サーバは、トレース クラス ID を systracemsgs の msgid 列に保管 します。トレース メッセージが systracemsgs 表に存在すれば、名前またはトレ ース メッセージ ID のいずれかを使用してメッセージを API トレース関数に指定 できます。 トレース メッセージ テキストは、ロケールに対して適切な言語とコード セットの テキスト文字列であり、テキストのどの部分を置換するかを示したトークン を含め ることができます。トークン名はパーセント (%) 記号で区切られます。次の INSERT 文は、qp1_exit と呼ばれる新しいメッセージを systracemsgs 表に書き 込みます。 INSERT INTO informix.systracemsgs(name, locale, message) VALUES (’qp1_exit’, ’en_us.8859-1’, ’Exiting msg number was %ident%; the input is still %i%’) このメッセージ テキストは英語です。そのため、systracemsgs 行はデフォルト ロケール U.S. 英語を指定しています。 この 2 番目のメッセージは qp1_exit メッセージのフランス語版です。そのため、 systracemsgs 行は、UNIX システムのフランス語ロケール (fr_fr.8859-1) を指定 しています。 INSERT INTO informix.systracemsgs(name, locale, message) VALUES (’qp1_exit’, ’fr_fr.8859-1’, ’Le numéro de message en sortie était %ident%; ¥ l’entrée est toujours %i%’) サーバ コード セットで使用できる任意の文字を使用して、メッセージ テキストを サーバ ロケールの言語で入力してください。変数を挿入するには、変数名の両端を 1 つのパーセント記号で囲みます (たとえば %a%)。データベース サーバは出力用 のトレース メッセージを準備するとき、各変数を実際の値で置き換えます。 コードへの各国対応トレース メッセージの書き込み DataBlade API には、UDR コードに各国対応トレースポイントを挿入するトレース 関数があります。 v GL_DPRINTF マクロは各国対応トレース メッセージをフォーマットし、トレー スポイントにしきい値を指定します。 GL_DPRINTF の構文は次のとおりです。 GL_DPRINTF(trace_class, threshold, (message_name [,toktype, val]...,MI_LIST_END)); v gl_tprintf( ) 関数は各国対応トレース メッセージをフォーマットしますが、トレ ースポイントしきい値は指定しません。 gl_tprintf( ) 関数はトレース ブロック内で使用されます。これは、tf( ) 関数を 使用して、指定されたしきい値を現行のトレース レベルと比較します。 gl_tprintf( ) の構文は次のとおりです。 gl_tprintf(message_name [,toktype ,val]..., MI_LIST_END); GL_DPRINTF と gl_tprintf( ) の構文要素には次の値があります。 118 trace_class トレース クラス名または文字列として示されるトレース クラス ID 整数値のいずれかです。 threshold 実行用のトレースポイントしきい値を設定する負でない整数です。 IBM Informix GLS: ユーザーズ ガイド message_name データベースの systracemsgs システム カタログ表に保管された 各国対応メッセージの ID です。 toktype トークン名を構成する文字列で、この後に 1 つのパーセント (%) 記号が続き、さらに printf フォーマットで使用される 1 文字の出 力指定子が続きます。 val 出力になる値式で、先行するトークンの出力指定子のタイプと一致 する必要があります。 MI_LIST_END 可変長リストを終了させるマクロ定数です。 重要: MI_LIST_END 定数は可変長リストの終わりをマークしま す。 MI_LIST_END を組み込まない場合、ユーザ定義ルーチ ンが失敗する可能性があります。 次の各国対応トレース文は GL_DPRINTF マクロを使用しています。 i = 6; /* If the current trace level of the funcEntry class is greater * than or equal to 20, find the version of the qp1_entry * message whose locale matches the current database locale */ GL_DPRINTF("funcEntry", 20, ("qp1_entry", "ident%s", "one", "i%d", i, MI_LIST_END)); デフォルト ロケールで、funcEntry クラスの現行のトレース レベルが 20 以上の 場合、このトレースポイントは次のトレース メッセージを生成します。 13:21:51 Exiting msg number was one; the input is still 6 次の各国対応トレース ブロックは、gl_tprinf() 関数を使用しています。 i = 6; /* Compare current trace level of "funcEnd" class and * with a tracepoint threshold of 25. Continue execution of * trace block if trace level >= 25 */ if ( tf("funcEnd", 25) ) { i = doSomething(); /* Generate an internationalized trace message (based * on current database locale) */ gl_tprintf("qp1_exit", "ident%s", "deux", "i%d", i, MI_LIST_END); } ロケールがフランス語で、funcEntry クラスの現行トレース レベルが 25 以上の場 合、トレースポイントは次のトレース メッセージを生成します。 13:21:53 Le numéro de message en sortie était deux; l’entrée est toujours 6 データベース サーバは、トレース メッセージをメッセージに関連付けられたロケ ールのコード セットでトレース出力ファイルに書き込みます。トレース メッセー ジが systracemsgs システム カタログ表から出されている場合、その文字は、表 の systracemsgs エントリの locale 列で指定されたロケールのコード セットで す。 UDR ソースのコード セットがサーバ処理ロケールのコード セットと異なる 第 4 章 データベース サーバの機能 119 (ただし、互換性はある) 場合、データベース サーバによってこれらのトレース メ ッセージにコード セット変換が実行されている可能性があります。 トレース メッセージの検索 各国対応トレース メッセージをトレース出力ファイルに書き込むために、データベ ース サーバは、locale 列が UDR のサーバ処理ロケールと一致する (または互換性 がある) systracemsgs システム カタログ表で行を見つける必要があります。その ため、トレース出力ファイルで特定のトレース メッセージを参照するには、データ ベース サーバが systracemsgs システム カタログ表のエントリと一致するサーバ 処理ロケールを生成するように、ロケールを指定する環境変数 (CLIENT_LOCALE、DB_LOCALE、および SERVER_LOCALE) を設定する必要 があります。 データベース サーバは、systracemsgs 表で、トレースポイントと同じ名前のエン トリ、および現行処理ロケールと systracemsgs の locale 列でロケールのすべて のコンポーネント (言語、地域、およびコード セット) が同じロケールを検索しま す。言語と地域だけが一致する場合、データベース サーバはコード セットを変換 します。言語と地域が一致するメッセージがない場合、正しい言語のメッセージで 最初に使用可能なものを使用します。適切な言語のメッセージがない場合、デフォ ルト言語 en_us のメッセージを使用します。 不透明 (opaque) 型でロケールを区別するデータ 不透明 (opaque) 型は完全にカプセル化されています。データベース サーバにとっ て、その内部構造は不明です。データベース サーバは、文字データのコード セッ ト変換や日付、数値、通貨データのロケール特有のフォーマットなど、ロケール特 有のタスクを自動的に実行することはありません。不透明 (opaque) 型を作成すると き、ロケールを区別するデータを処理するように透明 (opaque) 型のサポート関数を 書く必要があります。 特に、次のサポート関数を書くときはロケールを区別するデータの処理方法を考慮 してください。 v input( ) および output( ) サポート関数 v receive( ) および send( ) サポート関数 DataBlade API および IBM Informix GLS は、C で書かれた不透明 (OPAQUE) 型 サポート関数に対して、GLS サポートを提供します。次の節では、これらのサポー ト関数に関する GLS の考慮事項を要約します。不透明 (opaque) 型のサポート関数 に関する一般情報については、「IBM Informix: ユーザ定義ルーチンおよびデータ タイプ 開発者ガイド」を参照してください。 各国対応入出力サポート関数 不透明 (opaque) 型の内部表現は、不透明 (OPAQUE) 型データを保管する C 構造 体です。また、各不透明 (OPAQUE) 型には、外部表現 としての文字ベース フォー マットがあり、これはデータベース サーバによりラージ可変長文字 (LVARCHAR) 型値として受信されます。これは、クライアント アプリケーションのロケールに応 じて、シングルバイト (ASCII および非 ASCII) およびマルチバイト文字列を保持 できます。(ラージ可変長文字 (LVARCHAR) 型外部表現のデータ長は、Dynamic 120 IBM Informix GLS: ユーザーズ ガイド Server データベースのラージ可変長文字 (LVARCHAR) 型列の最大サイズ 32,739 バイトではなく、オペレーティング システムのみによって制限されます。) クライアント アプリケーションは、ラージ可変長文字 (LVARCHAR) 型に対してコ ード セット変換を実行します。ただし、データをクライアント アプリケーション とデータベース サーバ間で相互に転送する機能は、ロケールを区別する不透明 (OPAQUE) 型のデータをサポートするには不十分です。データ値がデスティネーシ ョンで正確に取り扱われるかどうかは定かではありません。 input( ) および output( ) サポート関数は、次のように不透明 (opaque) 型を内部 表現から外部表現に、またはその逆に変換します。 v input( ) 関数は、データ型の外部表現を内部表現に変換します。 v output( ) 関数は、データ型の内部表現を外部表現に変換します。 C UDR として書かれた不透明 (OPAQUE) 型サポート関数は、これらの関数がロケ ールを区別するデータ (次のタスクを含む) を正確に処理する必要があります。 ロケールを区別するタスク 詳細情報 文字データのコード セット変換 111 ページの『コード セット変換と DataBlade API』 文字データのマルチバイトまたはワイド文字の処 110 ページの『IBM Informix GLS ライブ 理 ラリ』 ロケール特有の日付、数値、または通貨データの 113 ページの『ロケール特有のデータ フ フォーマット ォーマット』 各国対応送受信サポート関数 send( ) および receive( ) 関数は、不透明 (opaque) 型のバイナリ転送をサポート します。すなわち、これらの関数は、次のように不透明 (opaque) 型をクライアント コンピュータの内部表現からサーバ コンピュータ (これが格納されている) の内部 表現に変換します。 v receive( ) 関数は、クライアント コンピュータの不透明 (opaque) 型の内部表現 をサーバ コンピュータの内部表現に変換します。 v send( ) 関数は、クライアント コンピュータの不透明 (opaque) 型の内部表現を サーバ コンピュータの内部表現に変換します。 内部表現に文字データが含まれている場合、クライアント アプリケーションは次の タスクも含めてロケール特有の変換を実行できません。 ロケールを区別するタスク 詳細情報 文字データのコード セット変換 112 ページの『不透明 (OPAQUE) 型サポー ト関数の文字列』 110 ページの『IBM Informix GLS ライブラ リ』 文字データのマルチバイトまたはワイド文字 の処理 receive( ) および send( ) サポート関数を C UDR として作成するときは、これ らの関数が上記のロケールを区別するタスクを正確に処理することを確認する必要 があります。 第 4 章 データベース サーバの機能 121 122 IBM Informix GLS: ユーザーズ ガイド 第 5 章 一般的な SQL API 機能 本章の概要 (E/C のみ) . . . . . . . . . . IBM Informix クライアント アプリケーションにお ける GLS のサポート . . . . . . . . . . クライアント アプリケーションのコード セット 変換 . . . . . . . . . . . . . . . クライアント アプリケーションが変換するデ ータ . . . . . . . . . . . . . . クライアント アプリケーションの国際化 . . . . 国際化. . . . . . . . . . . . . . . 123 123 123 125 126 126 ローカライゼーション . . GLS ロケールの選択 . . メッセージの翻訳 . . . ロケール特有データの処理 . . 文字の処理 . . . . . . データのフォーマット . . 部分文字の回避. . . . . 文字データのコピー . . コード セット変換の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 128 128 129 129 130 130 131 131 本章の概要 (E/C のみ) 本章では、IBM Informix Client Software Developer's Kit で開発するアプリケーショ ンに GLS 機能が与える影響について説明します。本章には、次の節があります。 v IBM Informix クライアント アプリケーションにおける GLS のサポート v クライアント アプリケーションの国際化 v ロケール特有データの処理 IBM Informix クライアント アプリケーションにおける GLS のサポート データベースに接続するために、ESQL/C クライアント アプリケーションはデータ ベース サーバから接続を要求します。データベース サーバは、クライアント アプ リケーションがデータベースにアクセスできるかどうかを検査して、クライアント とデータベースとの間の接続を確立する必要があります。クライアント アプリケー ションは次のタスクを実行します。 v クライアントおよびデータベース ロケール情報をデータベース サーバに送信す る ESQL/C プログラムは、クライアント アプリケーションが接続を要求すると、こ の手順を自動的に実行します。 v データベース サーバが生成する接続警告を検査する この手順を実行するには、ESQL/C プログラムにコードを組み込む必要がありま す。 クライアント アプリケーションのコード セット変換 本節では、クライアント製品が実行するコード セット変換について要約します。コ ード セット変換に関する一般情報については、30 ページの『コード セット変換の 実行』を参照してください。 以下の条件がいずれも真の場合、クライアント アプリケーションはクライアントと データベース コード セット間のコード セット変換を自動的に実行します。 v クライアントのコード セットとデータベース ロケールのコード セットが一致し ない。 v クライアント コード セットとデータベース コード セット間の変換に、有効な オブジェクト コード セット変換が存在する。 © Copyright IBM Corp. 1996, 2003 123 クライアント アプリケーションの実行が開始されると、クライアント アプリケー ションはクライアントとデータベース ロケールの名前を比較して、コード セット 変換を実行するかどうかを決定します。 CLIENT_LOCALE および DB_LOCALE 環境変数が設定されている場合、クライアント アプリケーションは、これらのロケ ール名を使用してクライアントおよびデータベースのコード セットをそれぞれ決定 します。 CLIENT_LOCALE が設定されていない (また DBNLS が設定されていな い) 場合、クライアント アプリケーションは、クライアント ロケールがデフォル ト ロケールであると想定します。 DB_LOCALE が設定されていない (また DBNLS が設定されていない) 場合、クライアント アプリケーションは、データベ ース ロケールがクライアント ロケールと同じである (CLIENT_LOCALE 設定の 値) と想定します。 クライアントとデータベースのコード セットが同じである場合、コード セット変 換は不要です。ただし、コード セットが一致しない場合、クライアント アプリケ ーションは 2 つのコード セットが変換可能 かどうかを判別する必要があります。 クライアントが、関連するコード セット変換ファイルを見つけることができる場 合、2 つのコード セットは変換可能です。これらのコード セット変換ファイル は、クライアント コンピュータ上になければなりません。 UNIX では、glfiles ユーティリティを使用して、ご使用の IBM Informix 製品がサ ポートするコード セット変換のリストを取得できます。詳しくは、165 ページの 『glfiles ユーティリティ (UNIX のみ)』を参照してください。 Windows では、デ ィレクトリ %INFORMIXDIR%¥gls¥cvY を調べて、ご使用の IBM Informix 製品が サポートする GLS コード セット変換を判別できます。このディレクトリについて 詳しくは、160 ページの『コード セット変換ファイル』を参照してください。 コード セット変換ファイルが存在しない場合、クライアント アプリケーションは 起動時に実行時エラーを生成して互換性のないコード セットであることを示しま す。コード セット変換ファイルが存在する場合、クライアント アプリケーション はデータベース サーバとの間でデータを送受信するとき、自動的にコード セット 変換を実行します。 クライアント アプリケーションはコード セット変換を実行するとき、次のように 想定します。 v 処理されるすべてのデータ値はクライアント コード セットで処理される。 v 単一データベース サーバでクライアント アプリケーションがアクセスするすべ てのデータベースが、同じデータベース ロケール、地域、およびコード セット を使用する。クライアント アプリケーションは異なるデータベースをオープンす るとき、データ ベース ロケールを再検査してコード セットが変更されているか どうかを判別することはありません。 警告: 各接続要求の後、SQLWARN 配列の 8 番目の文字フィールドで、警告フラ グを検査します。 2 つのデータベース ロケールが一致しない場合、クライ アント アプリケーションは不正なコード セット変換を実行する場合があり ます。クライアント アプリケーションは、DB_LOCALE がサポートするコ ード セットに基づいたコード セット変換の実行を続けます。そのような接 続を続行した場合、交換されるデータのフォーマットを理解する責任をあな たが負うことになります。 124 IBM Informix GLS: ユーザーズ ガイド たとえば、ご使用のクライアント アプリケーションが CLIENT_LOCALE を en_us.1252 に、DB_LOCALE を en_us.8859-1 に設定していると仮定します。ク ライアント アプリケーションは、Windows コード ページ 1252 (クライアント ロ ケール) と ISO8859-1 コード セット (データベース ロケール) 間のコード セット 変換を実行する必要があると判別します。次に、クライアント アプリケーション は、フランス語 fr_fr.8859-1 ロケールでデータベースをオープンします。 2 つの ロケールの言語および地域が異なるため、データベース サーバは SQLWARN 配列 の 8 番目の文字フィールドを W に設定します。この結果、データベース サーバは データのローカライズ順序について、データベースのロケール (fr_fr.8859-1) を使 用します。 ただし、ご使用のアプリケーションがこの接続を使用する可能性はあります。フラ ンス語ローカライズ順序でソートされた各国語文字 (NCHAR) および各国語可変長 文字 (NVARCHAR) 型を、アプリケーションが受信することが許容される場合があ ります。どちらのデータベース ロケールも、デフォルトの ISO8859-1 コード セッ トをサポートするため、クライアント アプリケーションが実行するコード セット 変換は依然として有効です。 ただし、アプリケーションが日本語 SJIS (ja_jp.sjis) ロケールのデータベースをオ ープンする場合、言語、地域、および コード セットが異なるため、データベース サーバは SQLWARN 警告フラグを設定します。この結果、データベース サーバは データのローカライズ順序について、ja_jp.sjis ロケールを使用します。 アプリケーションがこの接続を継続しない可能性があります。クライアント アプリ ケーションは、開始されたとき、Windows コード ページ 1252 と ISO8859-1 コー ド セットの間でコード セット変換が必要であることを判別しました。クライアン ト アプリケーションは、このコード セット変換をアプリケーションの終了まで実 行します。 ja_jp.sjis のデータベースをオープンするときは、コード セットが異なるため、ク ライアント アプリケーションはコード セット変換を正しく実行しません。クライ アント アプリケーションは、Windows コード ページ 1252 と日本語 SJIS の間で はなく、Windows コード ページ 1252 と ISO8859-1 間での変換を続けます。この 状態は、データの破損につながる可能性があります。 ヒント: ご使用の ESQL/C クライアント アプリケーションがコード セット変換を 使用する場合、特殊なプログラミング手順が必要な場合があります。詳し くは、148 ページの『コード セット変換の処理』を参照してください。 クライアント アプリケーションが変換するデータ 2 つのロケールのコード セットが異なるとき、IBM Informix クライアント製品 は、文字データのデータ破損を回避するためにコード セット変換を使用する必要が あります。コード セット変換は、次の文字データ要素を変換します。 v SQL データ型の値 – 文字 (CHAR) 型、可変長文字 (VARCHAR) 型、各国語文字 (NCHAR) 型、お よび各国語可変長文字 (NVARCHAR) 型 第 5 章 一般的な SQL API 機能 125 – テキスト (TEXT) 型 (バイト (BYTE) 型は変換されません ) Dynamic Server – LVARCHAR – 不透明 (opaque) 型の文字データ (そのサポート関数がコード セット変換を実 行する場合) Dynamic Server の終り v ESQL/C 文字型の値 (文字 (char) 型、固定長文字 (fixchar) 型、文字列 (string) 型、および可変長文字 (varchar) 型) v SQL 文、静的と動的の両方 v SQL 識別子これには、列、表、ビュー、PREPARE 文で処理された文、カーソ ル、制約、インデックス、トリガ、およびその他のデータベース オブジェクトの 名前が含まれます。識別子に非 ASCII 文字を使用できる SQL オブジェクトのリ ストについては、63 ページの『識別子内の非 ASCII 文字』を参照してくださ い。 v SPL テキスト v コマンド テキスト v sqlca.sqlerrm フィールドのエラー メッセージ テキスト クライアント アプリケーションの国際化 クライアント アプリケーションを国際化またはローカライズするために、C 言語イ ンターフェイスを使用するアプリケーション用のアプリケーション プログラム イ ンターフェイス (API) である IBM Informix GLS を使用します。詳しくは、3 ペー ジの『IBM Informix 製品による GLS サポート』 および「IBM Informix: GLS Programmer’s Manual」を参照してください。 国際化 国際化 はアプリケーションの作成または修正のプロセスで、これにより、コードを 変更または再コンパイルせずに、アプリケーションは正しい GLS ロケールを使用 してさまざまな言語、地域、およびコード セットをサポートできるようになりま す。 このプロセスにより、IBM Informix データベース アプリケーションは任意の国/地 域別環境および言語に容易に適用できるようになります。データベース アプリケー ションの国際化は、データベースに対してではなく、データベースにアクセスする アプリケーションに対して実行します。アプリケーションがアクセスするデータベ ースのデータは、すでに、エンド ユーザが理解できる言語になっているはずです。 データベース アプリケーションを国際化するには、実行時にアプリケーションが使 用する言語、地域、およびコード セットに関して、次の表にあるタスクが前提事項 を設けないようにアプリケーションを設計します。 126 IBM Informix GLS: ユーザーズ ガイド アプリケーション タスク 説明 ユーザ インターフ エンド ユーザに対して表示するテキストをインクルードします。これに ェイス は、メニュー、ボタン、プロンプト、ヘルプ テキスト、状況メッセー ジ、エラー メッセージ、およびグラフィックスが含まれます。 文字 次の処理タスクをインクルードします。 処理 v 文字分類 v 文字ケース変換 v 照合とソート v 文字対バイトの処理 v 文字列の走査 データ フォーマット マニュアル トレースによる デバッグ (IDS、DB API) v コード セット変換 数値、通貨、日付、および時刻値の、文化的差異に基づいたフォーマッ トをインクルードします。 ペーパー マニュアル、オンライン マニュアル、および README ファ イルなどの説明資料をインクルードします。 DataBlade API を使用すると、アプリケーションまたは DataBlade 開発 者は、各国対応トレース メッセージを使用できます。この機能は、シス テム カタログ表 systracemsgs および systraceclasses を操作する インライン コードを使用します。詳しくは、「IBM Informix: DataBlade API Programmer’s Guide」を参照してください。 各国対応アプリケーションは、これらのアプリケーション タスクに関する言語特有 の情報を動的に取得します。そのため、アプリケーションごとに 1 つの実行可能フ ァイルで複数の言語をサポートできます。 ローカライゼーション ローカライゼーション とは、製品を特定の国/地域別環境に適応させるプロセスで す。この処理には、通常、次のタスクが含まれます。 v 文化的差異に基づいたリソース ファイルの作成 v メッセージまたはリソース ファイルの翻訳 v 日付、時刻、および通貨フォーマットの設定 v 製品のユーザ インターフェイスの翻訳 ローカライゼーションには、エンド ユーザ マニュアル、パッケージ、および付随 資料の翻訳と作成が含まれる場合もあります。 データベース アプリケーションをローカライズするには、特定の言語、地域、およ びコード セット用のデータベース アプリケーションを作成します。ローカライゼ ーションには、次のタスクが含まれます。 v 目的の言語、地域、およびコード セット用の GLS ロケールが存在することを確 認 v アプリケーションが使用する外部リソースまたはメッセージ ファイルの文字列を 翻訳 重要: 各国対応アプリケーションは、非各国対応アプリケーションよりもかなり容 易にローカライズできます。 第 5 章 一般的な SQL API 機能 127 GLS ロケールの選択 アプリケーションをローカライズするには、アプリケーションがサポートする言 語、地域、およびコード セットの、文化的差異に基づいた情報を提供するロケール を選択します。ロケールの情報については、15 ページの『GLS ロケールの設定』 を参照してください。 各国対応アプリケーションは、実行時にロケールがどのように設定されるかについ て想定を行いません。アプリケーション環境が使用するロケールを指定すると、ア プリケーションはロケール特有の情報について、適切な GLS ロケール ファイルに アクセスできます。特定の言語、地域、およびコード セットをサポートする GLS ロケールがある限り、アプリケーションはロケール特有の情報を動的に取得できま す。 現行処理ロケール (単に現行ロケール と呼ばれることもあります) はアプリケーシ ョンで現在有効なロケールです。現行処理ロケールは、次のいずれかの環境に基づ いています。 v クライアント環境 ESQL/C はクライアント アプリケーションを作成します。このため、ESQL/C ア プリケーションの現行処理ロケールはクライアント ロケールです。 v データベース サーバが現在アクセスしているデータベース DataBlade API DataBlade クライアント アプリケーションの現行処理ロケールは、クライアント ロ ケールです。 DataBlade UDR の現行処理ロケールは、サーバ処理ロケールです。 これは、データベース サーバがクライアント、データベース、およびサーバ ロケ ールから決定したものです。 DataBlade API の終り メッセージの翻訳 各国対応アプリケーションは、アプリケーション コード内に言語特有のテキストを 持つべきではありません。言語特有のテキストには、次の種類の文字列がありま す。 v アプリケーションが表示する、または書き込む文字列 例としては、エラー メッセージ、情報メッセージ、メニュー項目、およびボタン ラベルがあります。 v アプリケーションが内部的に使用する文字列 例としては、定数、ファイル名、およびリテラル文字または文字列があります。 v エンド ユーザによって入力される文字列 例としては、yes および no による応答があります。 ヒント: メッセージ ファイルに SQL キーワード (SELECT、WHERE、INSERT、 および CREATE) を書き込む必要はありません。さらに、言語キーワード (if、switch、for、および char など) もメッセージ ファイルに書き込む必 要はありません。 128 IBM Informix GLS: ユーザーズ ガイド 各国対応アプリケーションでは、これらの文字列はリソース ファイル またはメッ セージ ファイル と呼ばれる外部ファイルへの参照となります。データベース アプ リケーションのこれらの文字列をローカライズするには、次のタスクを実行する必 要があります。 v 外部ファイル内のすべての文字列を翻訳する。 新しい外部ファイルは、アプリケーションが使用する文字列の翻訳済みバージョ ンを含みます。 v DBLANG 環境変数を、IBM Informix 製品が使用する翻訳済みメッセージ ファ イルのある INFORMIXDIR 内のサブディレクトリに設定する。 INFORMIXDIR 環境変数は、IBM Informix 製品がインストールされている場所を 示します。 rgetmsg( ) および rgetlmsg( ) 関数を使用して IBM Informix 製品 のメッセージを取得できます。これらの関数について詳しくは、「IBM Informix: ESQL/C Programmer’s Manual」を参照してください。 ロケール特有データの処理 各 IBM Informix SQL API 製品には、埋込み SQL 文およびプリプロセッサ文を持 つ ESQL/C ソース ファイルを処理するプロセッサがあります。 ESQL/C プロセッ サである esql は、C ソース ファイルを処理します。 ESQL/C 製品のプロセッサは、次の状態のオペレーティング システム ファイルを 使用します。 v これらのプロセッサは、ESQL/C ソース ファイルを処理するとき、言語特有のソ ース ファイル (.c) を作成します。 ESQL/C プロセッサは、クライアント コード セット (クライアント ロケールが 指定するもの) を使用して、これらの言語特有ファイルのファイル名を生成しま す。 v これらのプロセッサは、ユーザが作成する ESQL/C ソース ファイル (.ec) を読 み取ります。 ESQL/C プロセッサはクライアント コードを使用して、これらの ESQL/C ソー ス ファイルの内容を解釈します。 CLIENT_LOCALE 環境変数を使用してクライアント ロケールを指定します。 文字の処理 GLS ロケールは、シングルバイト文字とマルチバイト文字を含むことができる特定 のコード セットをサポートします。ご使用のアプリケーションは、シングルバイト 文字しか処理しないとき、バッファ内のバイト数はバッファが保持できる文字数に 等しいという前提で、文字列処理タスクを実行できます。シングルバイト コード セットについては、C コンパイラが提供する、配列割当てとアクセス権に関する組 込みスケーリングに依存できます。 ただし、アプリケーションがマルチバイト文字を処理する場合、バッファ内のバイ ト数とバッファ内の文字数が等しいと想定することはできません。各文字のバイト 数が変わる可能性があるため、C コンパイラに依存して文字処理タスク (マルチバ イト文字列をトラバースしたり、マルチバイト文字列用にメモリ内に十分な領域を 割り当てる、など) を実行することができなくなります。 第 5 章 一般的な SQL API 機能 129 IBM Informix GLS ライブラリの関数を使用して、文字処理タスクの国際化の実行 法をアプリケーションと通信できます。 文字処理タスクには次のものがあります。 v 文字列の走査 v 文字列処理 v 文字分類 v 大文字小文字変換 v 文字の比較およびソート これらの関数の情報および構文について詳しくは、「IBM Informix: GLS Programmer’s Manual」を参照してください。 データのフォーマット アプリケーションを国際化するときは、ロケール特有データのフォーマットの処理 方法を考慮します。エンド ユーザに表示される数値、通貨、および日時データのフ ォーマットは、ロケール特有です。 GLS ロケール ファイルは、次の表が示すよう に、以下のデータ型について、それぞれロケール特有のフォーマットを定義しま す。 データの型 ロケール ファイルのカテゴリ 10 進数 (NUMERIC) 型 通貨 (MONETARY) 型 日付 (DATE) 型および時刻 (TIME) 型 NUMERIC MONETARY TIME IBM Informix GLS ライブラリには、ロケール特有データに対して次のタスクを実 行できるようにする関数があります。 v 変換 は、ロケール特有のフォーマットを含む文字列をその値の内部表記に変更し ます。 通常は、ロケール特有文字列に対して変換を実行して、それをプログラム変数ま たはデータベース列に格納するための準備を行います。 v フォーマット は、値の内部表記をロケール特有文字列に変更します。 通常は、ロケール特有文字列に対してフォーマットを実行して、値の内部表記を エンド ユーザに表示するために準備します。 これらの関数の情報および構文について詳しくは、「IBM Informix: GLS Programmer’s Manual」を参照してください。 部分文字の回避 マルチバイト コード セットをサポートするロケールを使用するとき、部分文字が 生成されないようにするためにバッファを十分な大きさに定義する必要がありま す。次の場合に、考慮が必要です。 v あるバッファから別のバッファにデータをコピーするとき v コード セット変換が行われる可能性のある文字データがあるとき 130 IBM Informix GLS: ユーザーズ ガイド 部分文字の詳細な例については、78 ページの『列サブ文字列内の部分文字』を参照 してください。 文字データのコピー データをコピーするとき、バッファのサイズがデータを保持するために十分である ことを確認する必要があります。デスティネーション バッファのサイズがソース バッファ内のマルチバイト データ用として不十分な場合、データがコピー中に切り 捨てられる可能性があります。 たとえば、ESQL/C コードがマルチバイト データ A1A2A3B1B2B3 を buf1 から buf2 にコピーする場合は、次のようにします。 char buf1[20], buf2[5]; ... stcopy("A1A2A3B1B2B3", buf1); ... stcopy(buf1, buf2); buf2 はマルチバイト文字列を保持するのに十分な大きさがないため、コピーでは文 字列が A1A2A3B1B2 に切り捨てられます。この状態を回避するには、ESQL/C プ ログラムがコピーを実行する前に、マルチバイト文字列がバッファーに合っている ことを確認してください。 コード セット変換の使用 データベースからの文字データを保持するための文字バッファがある場合、このバ ッファが十分に大きく、アプリケーションがコード セット変換を使用する場合に行 われる可能性がある拡張に対応できることを確認する必要があります。クライアン トとデータベースのロケールが異なっていて、かつ変換可能な場合、アプリケーシ ョンはこの値を拡張する必要がある場合があります。詳しくは、30 ページの『コー ド セット変換の実行』を参照してください。 たとえば、fname 列が CHAR(8) と定義されている場合、次の ESQL/C コードは 8 バイトの文字値を選択して 10 バイトの buf1 ホスト変数に入れます。 char buf1[10]; ... EXEC SQL select fname into :buf1 from tab1 where cust_num = 29; データベースからの 8 バイトの文字値を保持できるように 10 バイトのバッファが 適当と考えるかもしれません。ところが、クライアント アプリケーションがこの値 を 12 バイトに拡張する場合、値は buf1 バッファに適合しなくなります。 fname 値は buf1 に合わせて切り捨てられ、fname にマルチバイト文字が含まれる場合は 部分文字が作成される可能性があります。詳しくは、78 ページの『列サブ文字列内 の部分文字』を参照してください。 この状態を回避するには、クライアントとデータベース間のコード セットの変換で 最大文字拡張 (4 バイト) を処理できるようにバッファを定義します。 第 5 章 一般的な SQL API 機能 131 132 IBM Informix GLS: ユーザーズ ガイド 第 6 章 IBM Informix ESQL/C 機能 本章の概要 (E/C のみ) . . . . . . . . . 非 ASCII 文字の処理 . . . . . . . . . . ホスト変数での非 ASCII 文字の使用 . . . 非 ASCII ファイル名の生成 . . . . . . ESQL/C ソース ファイルでの非 ASCII 文字の 使用 . . . . . . . . . . . . . . 非 ASCII 文字のフィルタ処理 . . . . . ESQL/C フィルタの起動 . . . . . . . ロケールを区別するデータの変数の定義 . . . 拡張 ESQL/C ライブラリ関数の使用 . . . . DATE フォーマット関数 . . . . . . . GL_DATE サポート . . . . . . . . DBDATE 拡張機能 . . . . . . . . 拡張 DATE フォーマット文字列 . . . . 日付エンド ユーザ フォーマットの優先順位 DATETIME フォーマット関数 . . . . . . GL_DATETIME サポート . . . . . . . . . . . . . . . . . . . 133 134 134 135 136 136 137 139 140 140 140 140 141 142 . 142 . 143 DBTIME サポート. . . . . . . . . . 拡張 DATETIME フォーマット文字列 . . . DATETIME エンド ユーザ フォーマットの優 先順位. . . . . . . . . . . . . . 数値フォーマット関数 . . . . . . . . . マルチバイト文字のサポート . . . . . . ロケール特有の数値フォーマット. . . . . 通貨記号フォーマット . . . . . . . . DBMONEY 拡張機能 . . . . . . . . . 文字列関数 . . . . . . . . . . . . . GLS 特有のエラー メッセージ . . . . . . コード セット変換の処理 . . . . . . . . . テキスト (TEXT) 型値の書込み . . . . . . DESCRIBE 文の使用 . . . . . . . . . . sqldata フィールド. . . . . . . . . . sqlname フィールド . . . . . . . . . TRIM 関数の使用 . . . . . . . . . . . . 143 143 143 144 144 144 146 147 148 148 148 149 150 150 151 151 本章の概要 (E/C のみ) 本章では、GLS 機能が SQL アプリケーション プログラム インターフェイス (API) である ESQL/C にどのように影響を及ぼすかについて説明します。本章に は、次の節があります。 v 134 ページの『非 ASCII 文字の処理』 v 139 ページの『ロケールを区別するデータの変数の定義』 v 140 ページの『拡張 ESQL/C ライブラリ関数の使用』 v 148 ページの『コード セット変換の処理』 v 151 ページの『TRIM 関数の使用』 本章では、ESQL/C に特定の GLS 情報を取り上げています。 ESQL/C の GLS 補 足説明については、 123 ページの『第 5 章 一般的な SQL API 機能』を参照して ください。 ヒント: GLS 機能に固有でない機能については、「IBM Informix: ESQL/C Programmer’s Manual」を参照してください。IBM Informix GLS ライブラ リ、すなわち各国対応アプリケーションの開発を可能にする、C 言語関 数、プロシジャ、およびマクロの集合の説明については、「IBM Informix: GLS Programmer’s Manual」を参照してください。Dynamic Server と共に 提供される C 言語 API である DataBlade API の情報については、 「IBM Informix: DataBlade API Programmer’s Guide」を参照してくださ い。 © Copyright IBM Corp. 1996, 2003 133 非 ASCII 文字の処理 ESQL/C プロセッサは、ESQL/C ソース ファイルで使用するために、クライアント ロケールからコード セットを取得します。 ESQL/C ソース ファイル内では、次の プログラム オブジェクトのために非 ASCII 文字を使用できます。 v ESQL/C コメント v データベース、表、列、ビュー、制約、PREPARE 文で処理された文、およびカ ーソルなど、SQL 識別子の名前 詳しくは、62 ページの『データベース オブジェクトの命名』を参照してくださ い。 v ESQL/C ホスト変数および標識変数名 たとえば、ESQL/C プログラムでは、マルチバイト文字を次のように使用できま す。 char A1A2[20], B1B2[20]; ... EXEC SQL select col1, col2 into :A1A2 :B1B2; ESQL/C ホスト変数について詳しくは、134 ページの『ホスト変数での非 ASCII 文字の使用』を参照してください。 v リテラル文字列 たとえば、ESQL/C プログラムでは、マルチバイト文字を次のように使用できま す。 EXEC SQL insert into tbl1 (nchr1) values ’A1A2B1B2’; Dynamic Server v ファイル名とパス名 (ご使用のオペレーティング システムがファイル名とパス名 にマルチバイト文字をサポートする場合)。 Dynamic Server の終り ヒント: C 言語コンパイラによっては、マルチバイト文字を、リテラルまたはコメ ントのみでサポートします。このようなコンパイラでは、ESQL/C プロセ ッサがマルチバイト フィルタを呼び出せるように、ESQLMF および CC8BITLEVEL 環境変数を設定しなければならない場合があります。詳し くは、135 ページの『非 ASCII ファイル名の生成』を参照してください。 ESQL/C ソース ファイルで非 ASCII 文字を使用するには、クライアント ロケール がそれらの文字をサポートする必要があります。非 ASCII 文字の使用の詳細につい ては、63 ページの『識別子内の非 ASCII 文字』を参照してください。 ホスト変数での非 ASCII 文字の使用 ESQL/C を使用すると、次の条件が真のとき、非 ASCII 文字をホスト変数内で使用 できます。 v クライアント ロケールは、ホスト変数名に非 ASCII 文字が使用されているコー ド セットをサポートします。 ESQL/C プログラムをプリプロセッサにかけた 134 IBM Informix GLS: ユーザーズ ガイド り、コンパイルする前に、クライアント ロケールを正しく設定する必要がありま す。詳しくは、15 ページの『GLS ロケールの設定』を参照してください。 v C コンパイラは、ソース コードと同じ非 ASCII 文字のコンパイルをサポートし ます。 C ソース コードでの非 ASCII 文字の使用を、 C コンパイラがサポートするこ とを確認する必要があります。ご使用の C コンパイラが非 ASCII 文字に提供す るサポートを示す方法については、137 ページの『ESQL/C フィルタの起動』を 参照してください。 さらに ESQL/C アプリケーションは、コメントと SQL 識別子内の非 ASCII 文字 もサポートします。詳しくは、63 ページの『識別子内の非 ASCII 文字』を参照し てください。 次のコードは、ホスト変数名内に非 ASCII 文字を含む整数ホスト変数を宣言してか ら、シリアル値をこの値に選択します。 /* This code fragment declares an integer host variable "hôte_ent", which contains a non-ASCII character in the name, and selects a serial value (code number in the "numéro" column of the "abonnés" table) into it. */ EXEC SQL BEGIN DECLARE SECTION; int hôte_ent; ... EXEC SQL END DECLARE SECTION; ... EXEC SQL select numéro into :hôte_ent from abonnés where nom = ’Ötker’; クライアント ロケールが非 ASCII 文字をサポートする場合は、これらの文字を使 用して標識変数を次の例のように定義できます。 EXEC SQL char short EXEC SQL BEGIN DECLARE SECTION; hôtevar[30]; ind_de_hôtevar; END DECLARE SECTION; その結果、次の例に示すように、これらの非 ASCII 名を持つ標識変数にアクセスで きます。 :hôtevar INDICATOR :hôtevarind :hôtevar $hôtevar :hôtevar $hôtevar ind ind 非 ASCII ファイル名の生成 ESQL/C ソース ファイルが処理されると、ESQL/C プロセッサは、ソース ファイ ルに対応する中間ファイルを生成します。非 ASCII 文字 (8 バイトおよびマルチバ イト文字) をこれらのソース ファイル名に使用する場合、非 ASCII 文字を含むフ ァイル名を生成するための、ESQL/C プロセッサの能力に次の制限が影響を及ぼし ます。 第 6 章 IBM Informix ESQL/C 機能 135 v ESQL/C プロセッサは、オペレーティング システムが 8 ビット透過かどうかを 認識している必要があります。 詳しくは、45 ページの『GLS8BITFSYS』を参照してください。 v クライアント ロケールのコード セット (クライアント コード セット) は、 ESQL/C ソース ファイル名に使用される非 ASCII 文字をサポートする必要があ ります。 v ご使用の C コンパイラは、ESQL/C ソース ファイルのファイル名が使用する非 ASCII 文字をサポートします。 ご使用の C コンパイラが非 ASCII 文字をサポートしない場合は、 CC8BITLEVEL 環境変数を、ソース ファイルにマルチバイト文字が含まれると きの予備手段として使用できます。詳しくは、135 ページの『非 ASCII ファイル 名の生成』を参照してください。 ESQL/C ソース ファイルでの非 ASCII 文字の使用 ESQL/C プロセッサの esql は、クライアント コード セット (クライアント ロケ ールのコード セット) で書き込まれた C ソース プログラムを受け入れます。 ESQL/C プリプロセッサ esqlc は、クライアント コード セットが非 ASCII 文字 を定義している限り、ESQL/C ソース コード内の非 ASCII 文字 (8 バイトおよび マルチバイト) を適用します。 ただし、ご使用の C コンパイラの機能によって、非 ASCII 文字を ESQL/C ソース ファイル内で使用する能力が制限される可能性があります。 C コンパイラが非 ASCII 文字を完全にサポートしない場合は、これらの文字を含む ESQL/C プログラ ムを正常にコンパイルできない可能性があります。 C コンパイラの共通の非 ASCII 制限のサポートを提供するために、ESQL/C は、esqlmf と呼ばれる ESQL/C フィ ルタを提供します。 本節では、ESQL/C フィルタについて次の情報を提供します。 v ESQL/C フィルタが非 ASCII 文字を処理する方法 v ESQL/C フィルタを起動する方法 非 ASCII 文字のフィルタ処理 ESQL/C ソース プログラムのコンパイル プロセスの一部として、ESQL/C プロセ ッサは C コンパイラを呼び出します。非 ASCII 文字を含む ESQL/C ソース コー ドを開発する場合は、C コンパイラによるこのような文字の処理方法が、コンパイ ル プロセスの正常終了に影響を及ぼす可能性があります。特に、次の状態が ESQL/C プログラムのコンパイルに影響を及ぼす可能性があります。 v マルチバイト文字が C 言語トークンを含む可能性がある。 マルチバイト文字のコンポーネントが、パーセント ( % )、カンマ ( , )、円記号 ( ¥ )、および二重引用符 ( ″ ) 文字などのいくつかのシングルバイト文字と区別 されない可能性があります。このような文字が引用符付きストリングに含まれて いる場合、C コンパイラはそれらを C 言語トークンと解釈します。これは、コ ンパイル エラーまたは文字の脱落の原因となる可能性があります。 v C コンパイラが 8 ビット透過でない可能性がある。 コード セットが非 ASCII 文字 (コード値が 127 より大きい) を含む場合、C コ ンパイラは文字を解釈するために 8 ビット透過でなければなりません。 8 ビッ 136 IBM Informix GLS: ユーザーズ ガイド ト透過になるには、コンパイラはコード値の一部として 8 ビットを読み取る必要 があります。すなわち、この 8 ビットの意味を無視したり、これについて独自の 解釈を行ってはいけません。 非 ASCII 文字をフィルタ処理するために、ESQL/C フィルタは文字の各バイトを 8 進数等価に変換します。たとえば、マルチバイト文字 A1A2A3 の 8 進数表記が ¥160¥042¥244 で、stcopy() 呼出しに使用されているとします。 stcopy("A1A2A3", dest); esqlmf が ESQL/C ソース ファイルをフィルタ処理した後は、C コンパイラでは この行が次のように見えます。 stcopy("¥160¥042¥244", dest); /* correct interpretation */ C 言語トークン状態を処理するために、 C コンパイラが A2 バイト (8 進数 ¥042) を ASCII 二重引用符として解釈すること、および、次のように行が間違って構文解 析されることをフィルタによって防ぎます。 stcopy("A1"A3, dest); /* incorrect interpretation of A2 */ C コンパイラは、前述の行に対してエラーを生成します。これは、行の文字列引数 が誤って終了しているためです。さらに、esqlmf ユーティリティは A3 バイトの 8 番目のビットが C コンパイラによって無視されることを防ぐため、8 ビット透過 状態も処理します。コンパイラが 8 番目のビットを無視する場合は、A3 (8 進数 ¥244) を誤って 8 進数 ¥044 と解釈します。 ESQL/C フィルタの起動 図 5 は、非 ASCII 文字を含む ESQL/C プログラムがどのように実行可能プログラ ムになるかを示します。 図 5. 非 ASCII ソース プログラムからの ESQL/C 実行可能プログラムの作成 esql コマンドは、自動的に ESQL/C フィルタ、esqlmf を呼び出して非 ASCII 文 字を処理できます。次の環境変数を設定するとき、esqlmf を起動する方法を esql に次のように指示します。 v ESQLMF 環境変数は、esql が ESQL/C フィルタを自動的に呼び出すかどうかを 指示します。 第 6 章 IBM Informix ESQL/C 機能 137 ESQLMF を 1 に設定するすると、esql は esqlmf を、ESQL/C プリプロセッ サの後、C コンパイラの前に自動的に呼び出します。 v CC8BITLEVEL 環境変数は、esqlmf がフィルタ処理する、ESQL/C ソース ファ イル内の非 ASCII 文字を指示します。 非 ASCII 文字を処理するための、C コンパイラの能力を指示するように CC8BITLEVEL を設定します。 esqlmf フィルタが ESQL/C ソース ファイルをフィルタ処理する方法は、 CC8BITLEVEL 環境変数の値に応じて異なります。 CC8BITLEVEL のそれぞれの 値について、次の表に、ESQL/C プロセッサを ESQL/C ソース ファイル上で起動 する esqlmf コマンドを示します。 CC8BITLEVEL esqlmf アクション 0 リテラル文字列とコメント 内のすべての非 ASCII 文字を 8 進定数に変換 します。 リテラル文字列内の非 ASCII 文字を 8 進定数に変換します。ただし、コ メント内の非 ASCII は変換されません。 リテラル文字列内の非 ASCII 文字を 8 進定数に変換し、非 ASCII 文字内 のすべてのバイトに、8 番目のビット セットがあるようにします。 esqlmf を起動しません。 1 2 3 重要: CC8BITLEVEL が指定できる esqlmf コマンドを起動するには、ESQLMF 環 境変数を 1 に設定する必要があります。 CC8BITLEVEL を 0、1、または 2 に設定すると、ESQL/C プロセッサは次の手順 を実行します。 1. ESQL/C プリプロセッサを使用して、埋込み言語文 (source.ec) を C 言語ソー ス コード (source.c) に変換します。 2. プリプロセス ファイル (source.c 内の非 ASCII 文字を、ESQL/C フィルタ esqlmf (ESQLMF 環境変数が 1 の場合) を使用してフィルタ処理します。 esqlmf はフィルタ処理を開始する前に、.c_ ファイル拡張子 (source.c_) を持 つ C ソース ファイル (source.c) のコピーを作成します。 3. フィルタ済み C ソース ファイル (source.c) を C コンパイラを使用してコン パイルし、オブジェクト ファイル (source.o) を作成します。 4. オブジェクト ファイルを ESQL/C ライブラリと独自のライブラリにリンクして 実行可能プログラムを作成します。 CC8BITLEVEL を 3 に設定すると、ESQL/C プロセッサは前述のリストの手順 2 を省略します。 CC8BITLEVEL を設定しない場合、esql はリテラル文字列とコマンド内の非 ASCII 文字を変換します。 CC8BITLEVEL の値を修正して C コンパイラの機能を 反映することができます。 138 IBM Informix GLS: ユーザーズ ガイド ロケールを区別するデータの変数の定義 SQL データ型の各国語文字 (NCHAR) 型および各国語可変長文字 (NVARCHAR) 型は、ロケール特有のデータをサポートします。これは、データベース サーバがこ れらの型のデータ文字列をソートする場合に、コード セット順序ではなく、(ロケ ールがローカライズ照合を定義する場合) ローカライズ照合を使用するという意味 からです。各国語文字 (NCHAR) 型と各国語可変長文字 (NVARCHAR) 型について 詳しくは、68 ページの『文字データ型の使用』を参照してください。 ESQL/C は、文字データを含むホスト変数用に、事前定義データ型の文字列 (string) 型、固定長文字 (fixchar) 型、および可変長文字 (varchar) 型をサポート します。それに加えて、C 文字 (char) 型をホスト変数に使用できます。これらの 4 つのホスト変数データ型を各国語文字 (NCHAR) 型データと各国語可変長文字 (NVARCHAR) 型データに使用できます。 ESQL/C プログラムが文字ホスト変数への選択、または文字ホスト変数からの読取 りを行うとき、このプログラムは各国語文字 (NCHAR) 型と各国語可変長文字 (NVARCHAR) 型の列にアクセスできます。次のコードは、char ホスト変数の hôte を宣言し、次に各国語文字 (NCHAR) 型データを hôte 変数に選択します。 /* This code fragment declares a char host variable "hôte", which contains a non-ASCII character in the name, and selects NCHAR data (non-ASCII names in the "nom" column of the "abonnés" table) into it. */ EXEC SQL BEGIN DECLARE SECTION; char hôte[10]; ... EXEC SQL END DECLARE SECTION; ... EXEC SQL select nom into :hôte from abonnés where numéro > 13601; 各国語文字 (NCHAR) 型と各国語可変長文字 (NVARCHAR) 型の ESQL/C ホスト 変数を宣言するときは、次のように、宣言される変数のサイズと保持できる文字デ ータの量の関係に注意してください。 v ご使用のロケールがシングルバイト コード セットをサポートする場合、各国語 文字 (NCHAR) 型と各国語可変長文字 (NVARCHAR) 型の変数のサイズによっ て、ロケールが保持できる文字数が決定されます。 v ご使用のロケールがマルチバイト コード セットをサポートする場合、1 文字に つき 1 バイトの関係を想定できなくなります。 この場合は、ESQL/C ホスト変数を、データベースから受信すると予想される文 字数を供給できるだけ十分な大きさに宣言する必要があります。 詳しくは、68 ページの『各国語文字 (NCHAR) 型』と 70 ページの『各国語可変長 文字 (NVARCHAR) 型』を参照してください。 文字ホスト変数 (文字型 (char) 型、固定長文字 (fixchar) 型、文字列 (string) 型、または可変長文字 (varchar) 型) が保持する値を、各国語文字 (NCHAR) 型ま たは各国語可変長文字 (NVARCHAR) 型の列に挿入できます。 第 6 章 IBM Informix ESQL/C 機能 139 拡張 ESQL/C ライブラリ関数の使用 IBM Informix SQL API 製品は、ESQL/C ライブラリ関数に対するロケール特有の エンハンスメントをサポートします。これらの ESQL/C ライブラリ関数は、次のカ テゴリに分かれます。 v DATE フォーマット関数 v DATETIME フォーマット関数 v 数値フォーマット関数 v 文字列関数 それに加え、本節では、これらの ESQL/C 関数が作成する可能性のある GLS 関連 エラー メッセージについて説明します。 DATE フォーマット関数 ESQL/C DATE フォーマット関数は、次のとおりです。 v rdatestr( ) v rstrdate( ) v rdefmtdate( ) v rfmtdate( ) これらの関数は、元号ベース日付 (DATE) 型値をフォーマットするための次の拡張 機能をサポートします。 v GL_DATE 環境変数のサポート v DBDATE 環境変数の元号ベース日付フォーマット v ESQL/CDATE フォーマット関数用の日付フォーマット文字列に対する拡張機能 v 日付エンド ユーザ フォーマットの優先順位のサポート 本節では、ESQL/C DATE フォーマット関数の、ロケール特有の動作について説明 します。詳しくは、「IBM Informix: ESQL/C Programmer’s Manual」を参照してく ださい。 GL_DATE サポート GL_DATE 設定は、上記の ESQL/C DATE フォーマット関数が生成する結果に影響 を与えることができます。 GL_DATE が指定するエンド ユーザ フォーマットは、 クライアント ロケールが定義するデータ エンド ユーザ フォーマットを上書きし ます。詳しくは、142 ページの『日付エンド ユーザ フォーマットの優先順位』を 参照してください。 DBDATE 拡張機能 DBDATE 環境変数用の拡張元号ベース日付構文をサポートする ESQL/C DATE フ ォーマット関数は、次のとおりです。 v rdatestr( ) v rstrdate( ) 140 IBM Informix GLS: ユーザーズ ガイド DBDATE を元号ベースのフォーマットのいずれかに設定すると、これらの関数は、 元号ベース日付を使用して日付文字列と内部日付 (DATE) 型値との間で変換を行い ます。次の ESQL/C の例では、rdatestr() ライブラリ関数の呼出しを示します。 char str[100]; long jdate; ... rdatestr(jdate, str); printf("%s¥n", str); DBDATE を GY2MD/ に設定し、CLIENT_LOCALE を日本語 SJIS ロケール (ja_jp.sjis) に設定した場合、前述のコードは日付 08/18/1990 として次の値を出力 します。 H02/08/18 重要: IBM Informix 製品は、英字元号仕様の未定義文字をエラーとして扱います。 DBDATE を元号ベース日付フォーマット (中国語と日本語ロケールに固有) に設定 する場合は、CLIENT_LOCALE 環境変数を、元号ベース日付をサポートするロケー ルに設定するようにしてください。 拡張 DATE フォーマット文字列 拡張 DATE フォーマット文字列をサポートする、ESQL/C DATE フォーマット関数 は、次のとおりです。 v rdefmtdate( ) v rfmtdate( ) 次の表に、上記の ESQL/C 関数が GLS ロケールを使用してサポートする、拡張フ ォーマット文字列を示します。これらの拡張フォーマット文字列は、元号を 2 桁の 年オフセットでフォーマットします。 元号 フォーマット 使用される元号 完全な元号: 2 桁の年オフセットが続く基 eyy 本年 (期間) の完全名。 ″%EC%02.2Ey″ の GL_DATE エンド ユーザ フォーマットと 同様。 (CLIENT_LOCALE が指示する) クライアント ロケールが定義す る元号 省略元号: 2 桁の年オフセットが続く基本 gyy 年 (期間) の省略名 ″%Eg%02.2Ey″ の GL_DATE エンド ユーザ フォーマットと 同様。 (CLIENT_LOCALE が指示する) クライアント ロケールが定義す る元号 次の表に、元号ベース日付の拡張フォーマット文字列を示します。下の例は、クラ イアント ロケールが日本語 SJIS (ja_jp.sjis) であると想定しています。 説明 フォーマット例 1990 年 10 月 5 日の出力例: 省略元号 gyymmdd gyy.mm.dd eyymmdd eyy-mm-dd eyyB1B2mmB1B2ddB1B2 H021005 H02.10.05 A1A2021005 A1A202-10-05 A1A202B1B210B1B205B1B2 完全な元号 第 6 章 IBM Informix ESQL/C 機能 141 次の ESQL/C コードには、rdefmtdate() ライブラリ関数の呼出しが含まれていま す。 char fmt_str[100]; char in_str[100]; long jdate; ... rdatestr("10/05/95", &jdate); stcopy("gyy/mm/dd", fmt_str); rdefmtdate(&jdate, fmt_str, in_str); printf("Abbreviated Era Year: %s¥n", in_str); stcopy("eyymmdd", fmt_str); rdefmtdate(&jdate, fmt_str, in_str); printf("Full Era Year: %s¥n", in_str); CLIENT_LOCALE が日本語 SJIS (ja_jp.sjis) ロケールを指定すると、コードは次 の出力を表示します。 Abbreviated Era Year: H07/10/05 Full Era Year: H021005 日付エンド ユーザ フォーマットの優先順位 ESQL/C DATE フォーマット関数は、次の優先順位を使用して日付 (DATE) 型列に ある値のエンド ユーザ フォーマットを決定します。 1. DBDATE が指定するエンド ユーザ フォーマット (DBDATE が設定されている 場合) 2. GL_DATE が指定するエンド ユーザ フォーマット (GL_DATE が設定されてい る場合) 3. クライアント ロケールが指定するエンド ユーザ日付フォーマット (CLIENT_LOCALE が設定されている場合) 4. デフォルト ロケールからのエンド ユーザ日付フォーマット: %m %d %iY DBDATE、GL_DATE、および CLIENT_LOCALE の優先順位について詳しくは、 35 ページの『日時の優先順位』を参照してください。 ヒント: IBM Informix 製品は、以前の製品との互換性を目的として DBDATE をサ ポートします。新しいクライアント アプリケーション用には、GL_DATE 環境変数を使用することをお勧めします。 DATETIME フォーマット関数 ESQL/C DATETIME フォーマット関数は、次のとおりです。 v dtcvfmtasc( ) v dttofmtasc( ) これらの関数は、元号ベースの日時 (DATETIME) 型値をフォーマットするための次 の拡張機能をサポートします。 v GL_DATETIME 環境変数のサポート v DBTIME 環境変数を元号ベースの日時でサポート v ESQL/C DATETIME フォーマット関数用の日時フォーマット文字列に対する拡張 機能 v DATETIME エンド ユーザ フォーマットの優先順位のサポート 142 IBM Informix GLS: ユーザーズ ガイド 本節では、ESQL/C DATETIME フォーマット関数のロケール特有の動作について説 明します。 ESQL/C DATETIME フォーマット関数の一般情報については、 「IBM Informix: ESQL/C Programmer’s Manual」を参照してください。 GL_DATETIME サポート GL_DATETIME 設定は、上記の ESQL/C DATETIME フォーマット関数が生成する 結果に影響を及ぼすことができます。 GL_DATETIME が指定するエンド ユーザ フォーマットは、クライアント ロケールが定義する日時フォーマットを上書きしま す。詳しくは、143 ページの『DATETIME エンド ユーザ フォーマットの優先順 位』を参照してください。 DBTIME サポート ESQL/C DATETIME フォーマット関数は、DBTIME 環境変数用の拡張元号ベース 日時フォーマット文字列をサポートします。 DBTIME を元号ベースのフォーマッ トに設定すると、これらの関数はリテラル日時 (DATETIME) 型文字列と内部日時 (DATETIME) 型値との間で変換を行います。 ヒント: IBM Informix 製品は、以前の製品との互換性を目的として DBTIME をサ ポートします。新しいアプリケーション用には、GL_DATETIME 環境変数 を使用することをお勧めします。 DBTIME を元号ベースの DATETIME フォーマット (中国語と日本語ロケールに固 有) に設定する場合は、CLIENT_LOCALE 環境変数を、元号ベースの日時をサポー トするロケールに設定するようにしてください。 拡張 DATETIME フォーマット文字列 次の表に、ESQL/C DATETIME フォーマット関数がサポートする拡張フォーマット 文字列を示します。 フォーマット 説明 1991 年 12 月 27 日の出力 %y %m %dc1 %Y %m %dc1 %y %m %dj1 %Y %m %dj1 %y %m %dj2 %Y %m %dj2 台湾の民国日付 台湾の民国日付 省略元号記号を使用した日本元号 省略元号記号を使用した日本元号 完全な元号記号を使用した日本元号 完全な元号記号を使用した日本元号 80 12 27 0080 12 27 H03 12 27 H0003 12 27 A1A2B1B203 12 27 A1A2B1B20003 12 27 前述の表のフォーマットに加え、これらの ESQL/C DATETIME フォーマット関数 は、GLS 日時指定子をサポートします。これらの指定子のリストについては、48 ページの『GL_DATE』と 53 ページの『GL_DATETIME』を参照してください。 DATETIME エンド ユーザ フォーマットの優先順位 ESQL/CDATETIME フォーマット関数は、次の優先順位を使用して日時 (DATETIME) 型列にある値のエンド ユーザ フォーマットを決定します。 1. DBTIME が指定するエンド ユーザ フォーマット (DBTIME が設定されている 場合) 2. GL_DATETIME が指定するエンド ユーザ フォーマット (GL_DATETIME が設 定されている場合) 第 6 章 IBM Informix ESQL/C 機能 143 3. クライアント ロケールが指定する日時エンド ユーザ フォーマット (CLIENT_LOCALE が設定されている場合) 4. デフォルト ロケールからの日時エンド ユーザ フォーマット: %iY-%m-%d %H:%M:%S DBDATE、GL_DATE、および CLIENT_LOCALE の優先順位について詳しくは、 35 ページの『日時の優先順位』を参照してください。 数値フォーマット関数 ESQL/C 数値フォーマット関数は、次のとおりです。 v rfmtdec( ) v rfmtdouble( ) v rfmtlong( ) これらの関数は、次の拡張機能を数値フォーマット用にサポートします。 v フォーマット文字列内のマルチバイト文字のサポート v 数値に対するロケール特有のフォーマット v 通貨記号の書式制御文字 v DBMONEY 環境変数のサポート 本節では、ESQL/C 数値フォーマット関数のロケール特有の動作について説明しま す。 ESQL/C 数値フォーマット関数の一般情報については、「IBM Informix: ESQL/C Programmer’s Manual」を参照してください。 ヒント: これらの ESQL/C 数値フォーマット関数が戻す可能性のあるエラーのリス トについては、148 ページの『GLS 特有のエラー メッセージ』を参照して ください。 マルチバイト文字のサポート 該当するマルチバイト文字を定義するマルチバイト コード セットを、クライアン ト ロケールがサポートする場合、ESQL/C 数値フォーマット関数は、フォーマット 文字列内にあるのこれらのマルチバイト文字をサポートします。ただし、これらの ESQL/C 関数およびルーチンは、マルチバイト文字をリテラル文字として解釈しま す。 ASCII 書式制御文字のマルチバイト等価は使用できません。 たとえば、次の ESQL/C コードは、フォーマット文字列のマルチバイト文字 A1A2 を使用した rfmtlong( ) 関数の呼出しを示します。 stcopy("A1A2***,***", fmtbuf); rfmtlong(78941, fmtbuf, outbuf); printf("Formatted value: %s¥n", outbuf); このコードは、次の出力を生成します (クライアント コード セットに A1A2 文字 が含まれる場合)。 Formatting value: A1A2*78,941 ロケール特有の数値フォーマット ESQL/C 数値フォーマット関数では、引数としてフォーマット文字列が必要です。 このフォーマット文字列は、数値フォーマット関数が数値をフォーマットする方法 144 IBM Informix GLS: ユーザーズ ガイド を決定します。フォーマット文字列は、一連の書式制御文字と次の通貨表記で構成 されます。 書式制御文字 機能 ドル記号 ($) カンマ (,) ピリオド (.) 通貨記号 3 桁区切り記号 小数点記号 通貨記号、小数点記号、および 3 桁区切り記号を配置する場所を識別するには、使 用するクライアント ロケールに関係なく、前述の ASCII 記号をフォーマット文字 列で使用する必要があります。数値フォーマット関数は、次の優先順位を使用して これらの記号をロケール特有の等価に変換します。 1. DBMONEY が示す記号 (DBMONEY が設定されている場合) DBMONEY のロケール特有の動作については、147 ページの『DBMONEY 拡張 機能』を参照してください。 2. クライアント ロケールの適切なロケール カテゴリが指定する記号 (CLIENT_LOCALE が設定されている場合) フォーマット文字列に $ または @ 書式制御文字が含まれている場合、数値フ ォーマット関数は値が通貨値だと想定し、クライアント ロケールの MONETARY カテゴリを参照します。これら 2 つの記号がフォーマット文字列 内にない場合、数値フォーマット関数はクライアント ロケールの NUMERIC カ テゴリを参照します。 $ および @ 書式制御文字の使用について詳しくは、146 ページの『通貨記号フ ォーマット』を参照してください。 MONETARY および NUMERIC ロケール カテゴリについて詳しくは、154 ページの『ロケール カテゴリ』を参照してく ださい。 3. フォーマット文字列に表示される実際の記号 ($、カンマ、またはピリオド) これらの数値フォーマット関数は、フォーマット文字列内のドル記号を、 DBMONEY が指定する通貨記号 (設定されている場合)、またはクライアント ロケ ールが指定する通貨記号 (DBMONEY が設定されていない場合) に置き換えます。 同じことが、小数点記号と 3 桁区切り記号にも当てはまります。たとえば、次の ESQL/C コードは rfmtlong() 関数の呼出しを示します。 stcopy("$***,***.&&", fmtbuf); rfmtlong(78941, fmtbuf, outbuf); printf("Formatted value: %s¥n", outbuf); デフォルト、ドイツ語、およびスペイン語のロケールでは、このコードは、 78941.00 という論理金額 (MONEY) 型の値で、次の結果を生成します (DBMONEY が設定されていない場合)。 フォーマット文字列 クライアント ロケール フォーマット済みの値 $***,***.&& デフォルト ロケール (en_us.8859-1) ドイツ語ロケール (de_de.8859-1) スペイン語ロケール (es_es.8859-1) $*78,941.00 DM*78.941,00 Pts*78.941,00 第 6 章 IBM Informix ESQL/C 機能 145 通貨記号フォーマット ESQL/C 数値フォーマット関数は、「IBM Informix: ESQL/C Programmer’s Manual」で説明されているすべての書式制御文字をサポートします。それに加え、 次の書式制御文字を使用してフォーマット済み出力に通貨記号を入れる場所を指示 できます。 書式制御文字 機能 $ この文字は、ロケールで定義されている場合は、前置 通貨記号に置き換え られます。 ロケールの MONETARY カテゴリが、前置 通貨記号を定義し ます。これは通貨値の前に表示される記号です。いくつかのドル記号を列に グループ化すると、単一通貨記号は、数字に干渉せずに置くことができる右 端に移動します。 この文字は、ロケールで定義されている場合は、後置 通貨記号に置き換え られます。ロケールの MONETARY カテゴリが、後置 通貨記号を定義しま す。これは通貨の値の後に表示される記号です。 @ 詳しくは、157 ページの『MONETARY カテゴリ』を参照してください。 両方の書式制御文字をフォーマット文字列内に使用できます。次のように、ロケー ルは、通貨記号を通貨値の前と後のどちらに表示するかを定義します。 v ロケールが通貨記号を値の前に表示するように指定して通貨値をフォーマットす る場合は、ロケールは通貨記号を 前置 通貨記号に設定し、後置 通貨記号をブラ ンク文字に設定します。 v ロケールが通貨記号を値の後に表示するように指定して通貨値をフォーマットす る場合は、ロケールは通貨記号を 後置 通貨記号に設定し、前置 通貨記号をブラ ンク文字に設定します。 デフォルト ロケールは、通貨記号を 前置 通貨記号として定義します。この通貨記 号はドル記号 ($) として表示されます。デフォルト ロケールでは、後置 通貨記号 は空白で表示されます。デフォルト、ドイツ語、およびフランス語ロケールでは、 数値フォーマット関数は、1.00 の内部金額 (MONEY) 型値の結果として次を生成 します。 146 IBM Informix GLS: ユーザーズ ガイド フォーマット文字列 クライアント ロケール フォーマット結果 $***,*** デフォルト ロケール (en_us.8859-1) ドイツ語ロケール (de_de.8859-1) フランス語ロケール (fr_fr.8859-1) $******1 DM******1 s******1 $***,***@ デフォルト ロケール (en_us.8859-1) ドイツ語ロケール (de_de.8859-1) フランス語ロケール (fr_fr.8859-1) $******1s DM******1s s******1FF $$,$$$.$$ デフォルト ロケール (en_us.8859-1) ドイツ語ロケール (de_de.8859-1) フランス語ロケール (fr_fr.8859-1) ssss$1.00 ssssDM1,00 sssss1FF ***,***@ デフォルト ロケール (en_us.8859-1) ドイツ語ロケール (de_de.8859-1) フランス語ロケール (fr_fr.8859-1) ******1s ******1s ******1FF @***,*** デフォルト ロケール (en_us.8859-1) ドイツ語ロケール (de_de.8859-1) フランス語ロケール (fr_fr.8859-1) s******1 s******1 FF******1 前述の表では、文字 s は空白またはスペースを表し、FF はフランスの通貨記号の フランス フラン、さらに DM はドイツの通貨記号のドイツ マルクです。 また、DBMONEY 環境変数は、前置通貨記号と後置通貨記号を設定できます。 43 ページの『DBMONEY』の構文ダイヤグラムでは、これらの記号はそれぞれ front および back で示されます。 DBMONEY 設定が指定されている場合は、この設定 は、ロケールの MONETARY カテゴリが定義する記号よりも優先されます。 DBMONEY 拡張機能 通貨記号と小数点記号を、DBMONEY 環境変数を使用して指定できます。これらの 設定値は、クライアント ロケールが指定する通貨表記を上書きします。 クライアント コード セットによってサポートされれば、これらの記号にマルチバ イト文字を使用できます。たとえば、次の表は、マルチバイト文字がどのように出 力例に表示されるかを示します。 フォーマット文字列 フォーマット される数値 DBMONEY 出力 ″$$,$$$.$$″ ″$$,$$$.$$″ ″$$,$$$.$$″ ″$$,$$$.$$″ ″&&,&&&.&&@″ ″$&&,&&&.&&@″ ″$&&,&&&.&&@″ ″@&&,&&&.&&″ 1234 1234 1234 1234 1234 1234 1234 1234 ’$’. DM, A1A2. .A1A2 .A1A2 A1A2. .A1A2 .A1A2 $1,234.00 DM1.234,00 A1A21,234.00 s1,234.00 s1,234.00A1A2 A1A2s1,234.00 s1,234.00A1A2 A1A2s1,234.00 前述の表では、文字 s は空白またはスペースを表します。 第 6 章 IBM Informix ESQL/C 機能 147 文字列関数 次の ESQL/C 文字列関数は、ロケール特有のシフト文字をサポートします。 v rdownshift( ) v rupshift ( ) これらの文字列関数は、クライアント ロケールの CTYPE カテゴリの情報を使用し て、シフトされたコード ポイントを判別します。クライアント ロケールがマルチ バイト コード セットを指定する場合、これらの関数はマルチバイト文字列を操作 できます。 重要: マルチバイト文字列を使用すると、シフトされた文字列はシフト操作後に、 シフト操作前よりも多くのメモリを使用する可能性があります。これらの ESQL/C シフト関数に渡すバッファに、この拡張を供給するために十分な容 量があることを確認してください。 GLS 特有のエラー メッセージ 次の ESQL/C 関数は、GLS に特定のエラー メッセージを生成する可能性がありま す。 v DATE フォーマット関数 v DATETIME フォーマット関数 v 数値フォーマット関数 GLS 特定のエラー メッセージについて詳しくは、UNIX の finderr ユーティリテ ィ、または Windows の Informix エラー メッセージユーティリティを使用してく ださい。 コード セット変換の処理 クライアントとデータベース コード セットが異なる場合は、ESQL/C クライアン ト アプリケーションは文字データのコード セット変換を実行します。詳しくは、 30 ページの『コード セット変換の実行』を参照してください。ご使用の ESQL/C アプリケーションが、コード セット変換が行われる可能性のある環境で実行されて いる場合は、アプリケーションが次の状態を正しく処理できることを確認してくだ さい。 v アプリケーションがシンプル ラージ オブジェクト (テキスト (TEXT) 型または バイト (BYTE) 型データ) をデータベースに書き込むときは、アプリケーション は、書き込む必要のあるシンプル ラージ オブジェクトの型を指示するようにロ ケータ構造体 loc_t 内の loc_type フィールドを設定する必要があります。 Dynamic Server v アプリケーションがスマート ラージ オブジェクト (CLOB または BLOB デー タ) をデータベースに書き込むときは、さまざまなラージ オブジェクト ファイ ル記述子を使用します。 Dynamic Server の終り 148 IBM Informix GLS: ユーザーズ ガイド v アプリケーションが sqlda 構造体を使用して動的 SQL 文を記述するときは、ア プリケーションは文字データの考えられるサイズの差を計算に入れる必要があり ます。 v コード セット変換が行われる可能性がある文字データがアプリケーションにある 場合は、データを保持できる文字バッファを宣言する必要があります。 詳しくは、130 ページの『部分文字の回避』を参照してください。 テキスト (TEXT) 型値の書込み ESQL/C は loc_t ロケータ構造体を使用してデータベース サーバからのシンプル ラージ オブジェクトの読取り、およびデータベース サーバへのシンプル ラージ オブジェクトの書込みを行います。この構造体の loc_type フィールドは、構造体 が記述するシンプル ラージ オブジェクトのデータ型を指示します。クライアント とデータベースのコード セットが同じである場合 (コード セット変換はなし)、ク ライアント アプリケーションは loc_type フィールドを明示的に設定する必要はあ りません。これはデータベース サーバがシンプル ラージ オブジェクトのデータ型 を暗黙的に決定できるためです。データベース サーバは、テキスト (TEXT) 型の文 字データと、バイト (BYTE) 型の非文字データを判断します。 ただし、クライアントとデータベースのコード セットが異なり、かつ変換可能な場 合は、クライアント アプリケーションは、データのコード セット変換を実行する かどうかを決定するために、シンプル ラージ オブジェクトのデータ型を認識して いる必要があります。 ESQL/C クライアント アプリケーションは、シンプル ラージ オブジェクトをデー タベースに挿入する前に、明示的にシンプル ラージ オブジェクトの loc_type フ ィールドを設定する必要があります。 v テキスト (TEXT) 型値については、ESQL/C クライアント アプリケーションは、 loc_type フィールドを INSERT 文の前の SQLTEXT に設定する必要がありま す。クライアントは、挿入するためにテキスト (TEXT) 型データをデータベース へ送信する前に、このデータのコード セット変換を行います。 v バイト (BYTE) 型値については、ESQL/C クライアント アプリケーションは、 loc_type フィールドを INSERT 文の前の SQLBYTES に設定する必要がありま す。クライアントは、挿入するためにバイト (BYTE) 型データをデータベースへ 送信する前に、このデータのコード セット変換を行いません。 重要: sqltypes.h ヘッダ ファイルは、データ型定数 SQLTEXT および SQLBYTES を定義します。これらの定数を使用するには、このヘッダ ファ イルを ESQL/C ソース ファイルにインクルードする必要があります。 ESQL/C ソース コードは、シンプル ラージ オブジェクトをデータベースから読み 取る前に、loc_type を設定する必要はありません。データベース サーバは、デー タベースからシンプル ラージ オブジェクトのデータ型を取得し、このデータ型を データと一緒にクライアントに送信します。 loc_bufsize を -1 に設定した場合、ESQL/C は単一シンプル ラージ オブジェク トを保持するようにメモリを割り当てます。これは、loc_t 構造体の loc_buffer フ ィールドにあるこのメモリ バッファのアドレスを格納します。クライアント アプ 第 6 章 IBM Informix ESQL/C 機能 149 リケーションが、データベース サーバが抽出するテキスト (TEXT) 型データのコー ド セット変換を実行する場合、ESQL/C は可能なデータ拡張を次のように処理しま す。 1. loc_buffer フィールドが参照する既存のメモリを解放します。 2. 拡張されたテキスト (TEXT) 型データを保管するために十分な容量のあるメモリ バッファを再割り当てします。 3. この新しいバッファのアドレスを loc_buffer フィールドに割り当てます。 4. 新しいメモリ バッファのサイズを loc_bufsize フィールドに割り当てます。 この再割当てが行われる場合、ESQL/C はテキスト (TEXT) 型データを保管するメ モリ アドレスを変更します。ご使用の ESQL/C プログラムがこのアドレスを参照 する場合、プログラムはアドレス変更を計算に入れる必要があります。 コード セット変換でテキスト (TEXT) 型データが拡張されない場合、またはデータ が圧縮される場合、ESQL/C はテキスト (TEXT) 型データのメモリの再割当てを行 う必要はありません。いずれの場合でも、loc_buffer フィールドは未変更のまま で、loc_bufsize フィールドには、loc_buffer フィールドが参照するバッファのサ イズが含まれます。 DESCRIBE 文の使用 sqlda 構造体とは、動的 SQL 文内の列に関する情報を含む動的管理構造体です。 DESCRIBE...INTO 文は、sqlda 構造体を使用して、SELECT 文の投影節の選択リス トにある列に関する情報を戻します。これにより、sqlda 構造体の sqlvar フィー ルドは、部分的に埋められた sqlvar_struct 構造体のシーケンスを指すように設定 されます。各構造体は、単一選択リスト列を記述します。 各 sqlvar_struct 構造体には、列名および列データについての文字データが含まれ ます。 ESQL/C クライアント アプリケーションがこの構造体を埋めるとき、列名 と列データはクライアント コード セットにあります。データベース サーバがこの 構造体を埋め、DESCRIBE...INTO 文を実行するとき、この文字データはデータベー ス コード セットにあります。 クライアント アプリケーションが、クライアントとデータベースのコード セット 間でコード セット変換を実行すると、列名と列データをクライアント コード セッ トに保管するために必要なバイト数が、この同じ情報をデータベース コード セッ トに保存するために必要なバイト数と等しくならない可能性があります。そのた め、sqlvar_struct の文字データのサイズは、コード セット変換中に増減する可能 性があります。このサイズの違いを処理するために、クライアント アプリケーショ ンは、sqlvar_struct 構造体内の文字データを正しく処理する必要があります。 sqldata フィールド 列データを保持するために、クライアント アプリケーションはバッファを割り当 て、sqldata をこのバッファを指すように設定する必要があります。クライアント アプリケーションがコード セット変換を実行する可能性がある場合、クライアント アプリケーションは、起こる可能性のある列データ サイズの増加を処理するために 十分な記憶域を割り当てる必要があります。 150 IBM Informix GLS: ユーザーズ ガイド DESCRIBE ... INTO 文が sqllen フィールドを設定するとき、sqllen 値がデータベ ース コード セットの列データの長さを指示します。そのため、DESCRIBE ... INTO 文が抽出する sqllen の値を使用する場合、クライアント コード セットにあ るときのデータ値用に十分な容量のバッファが割り当てられない可能性がありま す。 たとえば、次のコードは、malloc( ) システム呼出しを使用して sqldata バッファ を割り当てます。 EXEC SQL include sqlda; ... struct sqlda *q_desc; ... EXEC SQL describe sqlstmt_id into q_desc; ... q_desc->sqlvar[0].sqldata = (char *)malloc(q_desc->sqlvar[0].sqllen); 前述のコードでは、クライアント アプリケーションが sqllen 値を使用してバッフ ァ サイズを決定するため、変換する文字を切り捨てる可能性があります。その代わ りに、バッファを割り当てるときに、次のコードが示すとおり、バッファのサイズ を元のサイズの 4 倍に増やします。 EXEC SQL include sqlda; EXEC SQL define BUFSIZE_FACT 4; ... struct sqlda *q_desc; ... q_desc->sqlvar[0].sqllen = q_desc->sqlvar[0].sqllen * BUFSIZE_FACT + 1; q_desc->sqlvar[0].sqldata = (char *)malloc(q_desc->sqlvar[0].sqllen); バッファ サイズ ファクタ (BUFSIZE_FACT) は 4 をお勧めします。これは、マル チバイト文字の最大サイズが 4 バイトのためです。 sqlname フィールド sqlname フィールドには、列の名前が含まれます。クライアント アプリケーショ ンがコード セット変換を実行するとき、アプリケーションが列名をデータベース コード セットからクライアント コード セットに変換する場合、この列名も拡張さ れる可能性があります。 ESQL/C アプリケーションは、sqlname データのバッフ ァを内部の作業域に格納するため、ESQL/C ソース コードは、起こる可能性のある バッファ サイズの増加を処理する必要はありません。ご使用のコードは、クライア ント コード セットにある sqlname の内容を処理します。 TRIM 関数の使用 SELECT 文を動的に実行すると、DESCRIBE 文は、実行時に Projection 節の選択リ ストにある列に関する情報を戻すことができます。 DESCRIBE は、選択リスト列 のデータ型を、使用している動的管理構造体の適切なフィールドに戻します。 DESCRIBE 文を、PREPARE 文で処理された SELECT 文に対して選択リスト内の TRIM 関数で使用するとき、DESCRIBE が戻すトリムされた列のデータ型は、使用 するデータベース サーバ、およびトリムされる列のデータ型 (ソース文字値式) に 第 6 章 IBM Informix ESQL/C 機能 151 よって異なります。ソース文字値式について詳しくは、「IBM Informix: SQL ガイ ド: 構文」の TRIM 関数の説明を参照してください。 DESCRIBE 文が戻すデータ型は、次のようにソース文字値式のデータ型によって異 なります。 v ソース文字値式が文字 (CHAR) 型または可変長文字 (VARCHAR) 型の場合、 DESCRIBE はトリムされた列のデータ型を SQLVCHAR として戻します。 v ソース文字値式が各国語文字 (NCHAR) 型または各国語可変長文字 (NVARCHAR) 型の場合、DESCRIBE はトリムされた列のデータ型を SQLNVCHAR として戻します。 Dynamic Server TRIM は、ラージ可変長文字 (LVARCHAR) 型をサポートしません。 Dynamic Server の終り 次の SELECT 文には、文字 (CHAR) 型として定義される manu_code 列と、可変 長文字 (VARCHAR) 型列として定義される cat_advert 列が含まれています。次の SELECT 文の記述に TRIM 関数を使用すると、DESCRIBE は、データ型 SQLVCHAR を、両方のトリムされた列用に戻します。 SELECT TRIM(manu_code), TRIM(cat_advert) FROM catalog; そうではなく、manu_code 列が各国語文字 (NCHAR) 型として定義される場合、 DESCRIBE は、このトリムされた列用にデータ型 SQLNVCHAR を戻します。 重要: sqltypes.h ヘッダ ファイルは、データ型定数 SQLCHAR、SQLVCHAR、お よび SQLNVCHAR を定義します。これらの定数を使用するには、このヘッ ダ ファイルを ESQL/C ソース ファイルにインクルードします。 152 IBM Informix GLS: ユーザーズ ガイド 付録. GLS ファイルの管理 この付録では、GLS のために提供されるファイルについて説明します。これらは実 行可能ファイルのみです。次の節では、GLS ファイルを管理する方法について説明 します。 v GLS ファイルへのアクセス v GLS ロケール ファイル v その他の GLS ファイル v 未使用ファイルの削除 UNIX のみ v glfiles ユーティリティ (UNIX のみ) UNIX のみ の終り GLS ファイルへのアクセス IBM Informix 製品は、次の GLS ファイルにアクセスしてロケール関連の情報を取 得します。これらのファイルが提供する情報の種類の概要については、7 ページの 『GLS ロケールの理解』を参照してください。 GLS ファイル 参照 GLS ロケール ファイル コード セット変換ファイル コード セット ファイル レジストリ ファイル 154 160 162 163 ページ ページ ページ ページ 一般に、GLS ファイルを検証する必要はありません。ただし、これらのファイルを 調べて、次のロケール固有の情報を判別することができます。 ロケール固有の情報 照合順序: 完全なローカライズ順序 完全なコード セット照合順序 検証する GLS ファイル 参照 ソース ロケール ファイル (*.lc): COLLATION カテゴリ ソース コード セット ファイル (*.cm) 155 ページ 文字マッピング: 大文字と小文字間のロケール固有のマッ ソース ロケール ファイル (*.lc): ピング CTYPE カテゴリ ロケール固有の文字の分類 ソース ロケール ファイル (*.lc): CTYPE カテゴリ コード セット固有の文字マッピング ソース コード セット ファイル (*.cm) ソースとターゲットのコード セット間 ソース コード セット変換ファイル の文字のマッピング (*.cv) © Copyright IBM Corp. 1996, 2003 162 ページ 155 ページ 155 ページ 162 ページ 160 ページ 153 ロケール固有の情報 検証する GLS ファイル コード セット変換中に文字ミスマッチ 場合のメソッド 文字のコード ポイント ソース コード セット変換ファイル 160 ページ (*.cv) ソース コード セット ファイル 162 ページ (*.cm) エンド ユーザ フォーマット: 数値 (通貨以外) データ 通貨データ 日付データ 時刻データ ソース ロケール ファイル NUMERIC カテゴリ ソース ロケール ファイル MONETARY 型カテゴリ ソース ロケール ファイル TIME カテゴリ ソース ロケール ファイル TIME カテゴリ 参照 (*.lc): 156 ページ (*.lc): 157 ページ (*.lc): 157 ページ (*.lc): 157 ページ GLS ロケール ファイル ロケール ファイル は GLS ロケールを定義します。ロケール ファイルは、特定の 言語および地域のデータ処理に関連した基本的な言語と文化上の慣習を記述しま す。本節では、ロケール カテゴリとロケール ファイルの格納場所について説明し ます。 ロケール カテゴリ ロケール ファイルは、ロケール カテゴリの動作を指定します。 CTYPE および COLLATION カテゴリは、データベース サーバがデータベース内の文字データを格 納および抽出する方法に主に影響を及ぼします。 NUMERIC、MONETARY、および TIME カテゴリは、クライアント アプリケーションが関連 SQL データ型の内部値 をフォーマットする方法に影響を及ぼします。エンド ユーザ フォーマットについ て詳しくは、12 ページの『エンド ユーザ フォーマット』と 34 ページの『エンド ユーザ フォーマットのカスタマイズ』を参照してください。次の表は、デフォルト ロケール (米国英語 (U.S. English) のロケール カテゴリと動作を説明しています。 ロケール カテゴリ CTYPE COLLATION 154 説明 デフォルト ロケール (米国英語 (U.S. English)) 内 文字分類および大文字小文字 デフォルト コード セットは文字を分類しま 変換の動作を制御します。 す。 UNIX では、デフォルト コード セット は ISO8859-1 です。 Windows では、デフォ ルト コード セットは Windows コード ペー ジ 1252 です。 文字列比較の動作を制御しま デフォルト ロケールは、ローカライズ順序を す。 定義しません。そのため、データベース サー バは各国語文字 (NCHAR) 型と各国語可変長 文字 (NVARCHAR) 型データをコード セッ ト順序で照合します (SET COLLATION でロ ーカライズ順序の一部を指定している場合を 除く)。 IBM Informix GLS: ユーザーズ ガイド ロケール カテゴリ NUMERIC 説明 通貨以外の数値エンド ユー ザ フォーマットの動作を制 御します。 デフォルト ロケール (米国英語 (U.S. English)) 内 数値エンド ユーザ フォーマットで使用する 数値表記は次のとおりです。 v 3 桁区切り記号: カンマ (,) v 小数点記号: ピリオド (.) v 3 桁区切り記号間の桁数: 3 v 正の数の記号: プラス記号 (+) v 負の数値の記号: マイナス記号 (-) MONETARY v 元号ベース日付に代わる数字はなし 通貨エンド ユーザ フォーマ 通貨エンド ユーザ フォーマットで使用する ットの動作を制御します。 通貨表記は次のとおりです。 v 通貨記号: ドル記号 ($) は、通貨の値の前 に前置 記号として表示されます。 v 後置 の通貨記号は定義されません。 v 3 桁区切り記号: カンマ (,) v 小数点記号: ピリオド (.) v 3 桁区切り記号間の桁数: 3 v 正の数の記号: プラス記号 (+) v 負の数値の記号: マイナス記号 (-) TIME 金額 (MONEY) 型列のデフォルト小数点以下 桁数: 2 日時エンド ユーザ フォーマ 日時エンド ユーザ フォーマットは次のとお ットの動作を制御します。 りです。 v 日付 (DATE) 型値: %m/%d/%iy v 日時 (DATETIME) 型値: %iY-%m-%d %H:%M:%S MESSAGES 元号ベース日付の定義はなし メッセージに対する肯定およ なし び否定応答の定義を制御しま す。 CTYPE カテゴリ CTYPE カテゴリは、ロケールがサポートするコード セットの文字を分類する方法 を定義します。このカテゴリには、ロケールが領域、空白、制御文字、桁数、大文 字、小文字、および句読点記号として分類する文字の仕様が含まれます。 さらに、このカテゴリには、大文字と小文字間のマッピングが含まれる場合があり ます。 IBM Informix 製品は、識別名の妥当性の判断、文字の大文字小文字のシフ ト、または文字の比較を行う必要があるときにこのカテゴリにアクセスします。 COLLATION カテゴリ COLLATION カテゴリは、ローカライズ順序を定義できます。 IBM Informix 製品 は 2 つの文字列を比較する必要があるとき、最初に文字列を照合要素の系列に区切 ります。データベース サーバは、照合要素の各ペアを各要素の照合重量に基づいて 比較します。 COLLATION カテゴリは、次の機能をサポートします。 付録. GLS ファイルの管理 155 v 複数文字照合要素は、データベース サーバが単一単位として照合する必要のある 文字のセットを定義します。たとえば、ローカライズ照合順序は、スペイン語で L が 2 つ続く場合 (ll)、l を 2 つではなく、単一の照合要素として扱う場合が あります。 v 等価クラスは、同じ照合重量を別の要素に割り当てます。たとえば、ローカライ ズ順序は、a と A が等価クラスであることを指定できます (a と A は等価文 字)。 照合順序の違いは、文字 (CHAR) 型と各国語文字 (NCHAR) 型、および、可変長文 字 (VARCHAR) 型と各国語可変長文字 (NVARCHAR) 型の区別のみです。詳しく は、68 ページの『文字データ型の使用』を参照してください。 ロケールに COLLATION カテゴリが含まれない場合は、IBM Informix 製品は、す べての文字のデータ型の照合にコード セット順序を使用します。 v 文字 (CHAR) 型 Dynamic Server v ラージ可変長文字 (LVARCHAR) 型 Dynamic Server の終り v 各国語文字 (NCHAR) 型 v 各国語可変長文字 (NVARCHAR) 型 v テキスト (TEXT) 型 v 可変長文字 (VARCHAR) 型 Dynamic Server SET COLLATION 文は、DB_LOCALE が指定するロケールの COLLATION 設定 とは異なるローカライズ照合を指定できます。 SET COLLATION が指定する照合 順序の範囲は現行セッションです。ただし、制約、インデックス、UDR、およびト リガなどの文字列をソートできるデータベース オブジェクトは、各国語文字 (NCHAR) 型または各国語可変長文字 (NVARCHAR) 型値をソートするときに、作 成時の照合順序を常に使用します。 Dynamic Server の終り NUMERIC カテゴリ NUMERIC カテゴリは、通貨以外の数値のエンド ユーザ フォーマット用に次の数 値表記を定義します。 v 数値の小数点記号 v 数値の 3 桁区切り記号 v 3 桁区切り記号を挿入する前にグループ化される桁数 v 正および負の数値を示す文字 156 IBM Informix GLS: ユーザーズ ガイド この数値表記は、クライアント アプリケーション内にある数値 (10 進数 (DECIMAL) 型、整数 (INTEGER) 型、小桁整数 (SMALLINT) 型、実数 (FLOAT) 型、小桁実数 (SMALLFLOAT) 型) 列のデータのエンド ユーザ フォーマットに適 用されます。 重要: NUMERIC カテゴリ内の情報は、データベースにある数値データ型の内部の フォーマットには影響を及ぼしません。 また、NUMERIC カテゴリは、元号ベースの日時に使用する代替数字を定義しま す。代替数字についての詳細は、50 ページの『代替日付フォーマット』と 55 ペー ジの『代替時刻フォーマット』を参照してください。 MONETARY カテゴリ MONETARY カテゴリは、通貨値のエンド ユーザ フォーマット用に次の通貨表記 を定義します。 v 通貨記号、および通貨記号を通貨値の前と後のどちらに表示させるか v 通貨の小数点記号 v 通貨の 3 桁区切り記号 v 通貨のそれぞれの 3 桁区切り記号間でグループ化される桁数 v 正および負の通貨値を示す文字、およびこれらの文字の位置 (前または後) v 表示する小数点以下桁数 (小数点の右側の小数桁数) この通貨表記は、クライアント アプリケーション内の金額 (MONEY) 型列データ のエンド ユーザ フォーマットに適用されます。 重要: MONETARY カテゴリ内の情報は、データベースにある金額 (MONEY) 型の 内部フォーマットには影響を及ぼしません。 さらに、MONETARY カテゴリは、金額 (MONEY) 型列のために、デフォルトの小 数点以下桁数を定義します。デフォルト ロケール (米国英語 (U.S. English)) の場 合、データベース サーバは、金額(precision)(MONEY(precision) 型の値を、10 進数 (precision,2)(DECIMAL(precision,2) 型と同じ内部フォーマットで格納します。非デフ ォルト ロケールの場合は、別のデフォルト小数点以下桁数を定義できます。デフォ ルト小数点以下桁数について詳しくは、96 ページの『scale (小数点以下桁数) パラ メータ値の指定』を参照してください。 TIME カテゴリ TIME カテゴリは、日時値をフォーマットする文字および記号をリストします。こ の情報には、曜日と月の名前およびその省略形が含まれます。また、日付、時間 (12 時間と 24 時間)、および日時 (DATETIME) 型値の特殊な表記が含まれます。 これらの表記には、元号名 (日本元号のシステムにあるようなもの) および非グレゴ リオ暦 (アラビアの太陰暦など) を含むことができます。ロケールは、月、日、また は年の読取りまたは出力のために、カレンダ (グレゴリオ歴、ユダヤ暦、アラビア 暦、日本元号など) を指定します。 付録. GLS ファイルの管理 157 ロケールが元号ベースの日時をサポートする場合、TIME カテゴリは、完全な元号 名と省略元号名、および特殊な日時表記を定義します。詳しくは、50 ページの『代 替日付フォーマット』と 55 ページの『代替時刻フォーマット』を参照してくださ い。 この日時情報は、クライアント アプリケーション内の日付 (DATE) 型と日時 (DATETIME) 型列のデータのエンド ユーザ フォーマットに適用されます。 重要: TIME カテゴリの情報は、データベース内の日付 (DATE) 型および日時 (DATETIME) 型の内部フォーマットには影響を及ぼしません。 MESSAGES カテゴリ MESSAGES カテゴリは、肯定および否定応答のフォーマットを定義します。このカ テゴリはオプションです。 IBM Informix 製品は、MESSAGES カテゴリが定義する 文字列を使用しません。 クライアント ロケールの MESSAGES カテゴリのロケール名を取得するために、ク ライアント アプリケーションは CLIENT_LOCALE が指示するロケールを使用しま す。 CLIENT_LOCALE が設定されていない場合は、クライアントはカテゴリをデ フォルト ロケールに設定します。 ロケール ファイルの格納場所 IBM Informix 製品はロケール特有の情報を取得する必要があるとき、次の表にある GLS ロケール ファイルのいずれかにアクセスします。 プラットフォーム ロケール ファイル UNIX Windows $INFORMIXDIR/gls/lcX/lg_tr/codemodf.lco %INFORMIXDIR%¥gls¥lcX¥lg_tr¥codemodf.lco これらのパスでは、INFORMIXDIR は IBM Informix 製品をインストールするディ レクトリを指定する環境変数であり、gls は GLS ファイルを含むサブディレクト リです。本節の残りでは、GLS ロケール ファイルのパス名の残りの要素について 説明します。 ロケール ファイル サブディレクトリ lcX サブディレクトリのサブディレクトリ (X はロケール オブジェクト ファイル フォーマットのバージョン番号を表します) には GLS ロケール ファイルが含まれ ます。これらのサブディレクトリには、フォーム lg_tr の名前があります。ここ で、lg は 2 文字の言語名で、tr はロケールがサポートする 2 文字の地域名です。 次の表に、IBM Informix 製品がサポートできるいくつかの言語と地域、および関連 するロケール ファイル サブディレクトリ名を示します。 158 IBM Informix GLS: ユーザーズ ガイド 言語 地域 ロケール ファイル サブディレクトリ 英語 オーストラリア アメリカ合衆国 英国 ドイツ オーストリア スイス ベルギー カナダ スイス フランス en_au en_us en_gb de_de de_at de_ch fr_be fr_ca fr_ch fr_fr ドイツ語 フランス語 ロケール ソースとオブジェクト ファイル 各ロケール ファイルには、次の 2 つのフォームがあります。 v ロケール ソース ファイルは、ロケールのロケール カテゴリを定義する ASCII ファイルです。 このファイルは、.lc ファイル拡張子を持ち、対応するオブジェクト ファイルの マニュアルとして使用できます。 v ロケール オブジェクト ファイルは、ロケール情報のコンパイル済みフォームで す。 IBM Informix 製品は、オブジェクト ファイルを使用してロケール情報を迅速に 取得します。ロケール オブジェクト ファイルの拡張子は、.lco です。 ロケール ソース ファイル (.lc) のヘッダには、ロケールの言語、地域、コード セ ット、およびオプションのロケール修飾子がリストされます。次の表に示すとお り、ロケール ソース ファイルのセクションは、カテゴリが空の場合を除き、それ ぞれのロケール カテゴリをサポートします。 ロケール カテゴリ 参照 ロケール カテゴリ 参照 CTYPE COLLATION NUMERIC 155 ページ 155 ページ 156 ページ MONETARY TIME MESSAGES 157 ページ 157 ページ 158 ページ ロケール ファイル名 DOS システムで有効なファイル名とファイル拡張子の最大文字数について 8.3 filename.ext 制限に準拠するために、GLS ロケール ファイルは、そのファイル名に コード セット名 codemodf のコンデンス フォームを使用します。各ロケール ファ イルの 4 文字のコード 名は、ロケールがサポートするコード セットのコード セ ット番号の 16 進数表現です。 4 文字の modf 名は、オプションのロケール修飾子 です。 たとえば、ISO8859-1 コード セットには、10 進数で 819 で、16 進数で 0333 の IBM CCSID 番号があります。そのため、ISO8859-1 コード セットをサポートする 4 文字のロケール ソース ファイル名は、0333.lc です。 次の表に、IBM Informix 製品がサポートできるいくつかのコード セットおよびロ ケール修飾子を、それと関連したロケール ソース ファイル名とともに示します。 付録. GLS ファイルの管理 159 コード セット ロケール修飾子 ISO8859-1 (IBM CCSID 819) NoneDictionary Windows コード ページ 1252 (西ヨーロ NoneDictionary ッパ) IBM CCSID 850 NoneDictionary ロケール ソース ファイル 0333.lc0333dict.lc 04e4.lc04e4dict.lc 0352.lc0352dict.lc ISO8859-1 コード セットをサポートするフランス語ロケールは、0333.lc ファイル と呼ばれる GLS ロケールを、fr_fr ロケール ファイル サブディレクトリ内に持っ ています。デフォルト ロケールの米国英語 (U.S. English) も、ISO8859-1 コード セット (UNIX プラットフォーム上) を使用します。また、0333.lc と呼ばれるロケ ール ファイルも en_us ロケール ファイル サブディレクトリに含まれます。フラ ンス語ロケールと米国英語 (U.S. English) ロケールの両方が Windows コード ペー ジ 1252 をサポートするため、fr_fr と en_us ロケール ファイル サブディレクト リの両方に 04e4.lc ロケール ファイルが含まれます。 その他の GLS ファイル GLS ロケール ファイルに加えて、IBM Informix 製品は、次の GLS ファイルを使 用することもできます。 v コード セット変換ファイルは、あるコード セットを別のコード セットにマップ します。 v コード セット ファイルは、コード セットのコード ポイント値を定義します。 Windows のみ v レジストリ ファイルは、ロケールの別名を有効なロケール ファイル名に変換し ます。 Windows のみ の終り コード セット変換ファイル コード セット変換ファイル は、特定のソース コード セットの各文字を、特定の ターゲット コード セットの文字にマップする方法を記述します。 2 つのコード セット間のマッピングを記述するためにコード セット変換ファイルが存在している 場合は、IBM Informix 製品は特定のコード セット変換を実行できます。 重要: クライアント アプリケーションは、実行を開始すると、クライアントとデー タベース ロケールがサポートするコード セットを検査します。コード セッ トが異なり、コード セット変換ファイルが存在しない場合は、クライアント アプリケーションはエラーを生成します。詳しくは、25 ページの『データベ ース接続の確立』 を参照してください。 IBM Informix 製品がコード セット変換情報を取得する必要がある場合は、次の表 にあるいずれかの GLS コード セット変換ファイルにアクセスします。 160 IBM Informix GLS: ユーザーズ ガイド プラットフォーム コード セット変換ファイル UNIX Windows $INFORMIXDIR/gls/cvY/code1code2.cvo %INFORMIXDIR%¥gls¥cvY¥code1code2.cvo これらのパスでは、INFORMIXDIR は IBM Informix 製品をインストールするディ レクトリを指定する環境変数であり、gls は GLS ファイルを含むサブディレクト リです。さらに Y は、コード セット変換オブジェクト ファイル フォーマットの バージョン番号を表します。 本節の残りでは、GLS コード セット変換ファイルのパス名にある残りの要素につ いて説明します。 コード セット変換ソースとオブジェクト ファイル 各コード セット変換ファイルには、次の 2 つのフォームがあります。 v コード セット変換ソース ファイルは ASCII ファイルです。このファイルは、1 方向のコード セット変換に使用するマッピングを記述します。 このファイルは、.cv 拡張子を持ち、対応するオブジェクト ファイルのマニュア ルとして使用できます。 v コード セット変換オブジェクト ファイルは、コード セット変換情報のコンパイ ル済みフォームです。 IBM Informix 製品は、オブジェクト ファイルを使用してコード セット変換情報 を迅速に取得します。オブジェクト コード セット変換ファイルの拡張子 は、.cvo です。 コード セット変換ソース ファイル (.cv) のヘッダは、変換する 2 つのコード セ ットと変換の方向をリストします。 コード セット変換ファイル名 DOS 8.3 命名規則に準拠するために、GLS コード セット変換ファイルは、コード セット名 code1code2 のコンデンス フォームをファイル名に使用します。各コー ド セット変換ファイルの 8 文字の名前は、ソース コード セット (code1) および ターゲット コード セット (code2) のコード セット番号の 16 進表記から作成され ます。 たとえば、ISO8859-1 コード セットには、10 進数で 819 で、16 進数で 0333 の IBM CCSID 番号があります。 IBM CCSID 437 コード セット、共通 IBM UNIX コード セットには、16 進値の 01b5 があります。そのため、033301b5.cv コード セット変換ファイルは、CCSID 819 コード セットから CCSID 437 コード セット への変換を記述します。 コード セット変換の必要条件 IBM Informix 製品は、コード セット名マッピング ファイルを使用してコード セ ット名とさらにコンパクトなコード セット番号との間の変換を行います。レジスト リ ファイルを使用して、コード セット名またはコード セット番号に対応する 16 進値を検索できます。 多くのコード セット変換は、2 つ のコード セット変換ファイルを必要とします。 一方のファイルがコード セット A 内の文字から、コード セット B 内の対応する 付録. GLS ファイルの管理 161 文字への変換をサポートします。もう一方のファイルが逆方向の変換 (B から A) をサポートします。このような変換は、両方向 コード セット変換と呼ばれます。 たとえば、CCSID 437 コード セット (16 進数 01b5 コード番号) と CCSID 819 コード セット (または 16 進数 0333 コード番号を持つ ISO8859-1 ) との間のコー ド セット変換では、次の 2 つのコード セット変換ファイルが必要です。 v 01b50333.cv ファイルには、IBM Informix 製品が CCSID 437 コード セット内 の文字を ISO8859-1 コード セット内の文字に変換するときに使用するマッピン グが記述されています。 v 033301b5.cv ファイルには、IBM Informix 製品が ISO8859-1 コード セット内 の文字を CCSID 437 コード セット内の文字に変換するときに使用するマッピン グが記述されています。 これらの 2 つのコード セット間での変換を可能にするには、IBM Informix 製品 が、上記の両方の コード セット変換オブジェクト ファイルを見つけることができ る必要があります。 1 方向のみで変換を実行すると、文字がミスマッチする場合が あります。ミスマッチする文字について詳しくは、30 ページの『コード セット変 換の実行』を参照してください。 次の表に、IBM Informix 製品がサポートできるいくつかのコード セット変換を、 それに関連したコード セット変換ソース ファイル名と共に示します。 コード セット変換ソース ファイル ソース コード セット ターゲット コード セット ISO8859-1 Windows コード ページ 1252 ISO8859-1 033304e4.cvo IBM CCSID 850 ISO8859-1 IBM CCSID 850 03330352.cvo 03520333.cvo 04e40352.cvo Windows コード ページ 1252 035204e4.cvo Windows コード ページ 1252 ISO8859-1 IBM CCSID 850 Windows コード ページ 1252 IBM CCSID 850 04e40333.cvo コード セット ファイル コード セット ファイル (文字マッピングまたは charmap ファイルとも呼ばれる) は、ロケールおよびコード セット変換ファイルが後で使用するコード セットを定 義します。 GLS ロケールは、サポートするコード セットのために、適切なコード セット ファイルをインクルードします。さらに、IBM Informix 製品は、コード セ ット ファイルを持つコード セット間で、コード セット変換を実行できます。 IBM Informix 製品がコード セット情報を取得する必要があるときは、次の表にあ るいずれかの GLS コード セット ファイルにアクセスします。 162 プラットフォーム コード セット ファイル UNIX Windows $INFORMIXDIR/gls/cmZ/code.cmo %INFORMIXDIR%¥gls¥cmZ¥code.cmo IBM Informix GLS: ユーザーズ ガイド これらのパスでは、INFORMIXDIR は IBM Informix 製品をインストールするディ レクトリを指定する環境変数であり、gls は GLS ファイルを含むサブディレクト リです。また、Z は、コード セット オブジェクト ファイル フォーマットのバー ジョン番号を表します。 各コード セット ファイルには、次の 2 つのフォームがあります。 v コード セット ソース ファイルは、文字セットの文字を記述する ASCII ファイ ルです。 このファイルは、.cm 拡張子を持ち、対応するオブジェクト ファイルのマニュ アルとして使用できます。 v コード セット オブジェクト ファイルは、コード セット情報のコンパイル済み フォームです。 このオブジェクト ファイルは、ロケール オブジェクト ファイルを作成するため に使用されます。オブジェクト コード セット ファイルの拡張子は、.cmo で す。 Informix レジストリ ファイル (Windows のみ) コード セット名マッピング ファイル (レジストリと呼ばれる) とは、コード セッ ト名と別名をそのコード セット番号に関連付ける ASCII ファイルです。コード セ ット番号は、IBM CCSID 番号付けスキーマに基づいています。 IBM Informix 製品 は、コード セット番号を使用してロケール/コードセット変換ファイルのファイル名 を判別します。 たとえば、ISO8859-1 コード セットをサポートするフランス語ロケールを、ロケー ルの別名として次のロケール名を使用して指定できます。 v 完全なコード セット名 fr_fr.8859-1 v IBM CCSID 番号の 10 進数値 fr_fr.819 v IBM CCSID 番号の 16 進値 fr_fr.0333 最初の 2 つのフォームのいずれかでロケール名を指定するときは、IBM Informix 製品は、コード セット名マッピング ファイルを使用してコード セット名 (8859-1) またはコード セット番号 (819) をコンデンス コード セット名 (0333) に変換しま す。 IBM Informix 製品がコード セット名をコード セット番号に変更するために 使用する、ファイル形式と検索アルゴリズムについては、レジストリ ファイルの先 頭にあるコメントを参照してください。 IBM Informix 製品がロケールの別名についての情報を取得する必要があるときは、 次のパスにある GLS コード セット ファイルにアクセスします。 %INFORMIXDIR%¥gls¥cmZ¥registry これらのパスでは、INFORMIXDIR は IBM Informix 製品をインストールするディ レクトリを指定する環境変数であり、gls は GLS ファイルを含むサブディレクト リです。また、Z は、コード セット オブジェクト ファイル フォーマットのバー ジョン番号を表します。 付録. GLS ファイルの管理 163 警告: コード セット名マッピング ファイル、レジストリを Informix ディレクトリ から削除しないでください。このファイルを修正しないでください。 IBM Informix 製品は、このファイルをすべてのロケールの言語処理のために 使用します。 未使用ファイルの削除 IBM Informix 製品には、次の GLS ファイルが含まれます。 v ロケール ファイル: ソース (*.lc) とオブジェクト (*.lco) v コード セット変換ファイル: ソース (*.cv) とオブジェクト (*.cvo) v コード セット ファイル: ソースのみ (*.cm) ロケール/コードセット変換ファイルの削除 ディスク領域を節約するために、使用する予定のあるファイルのみを保持すること ができます。本節では、Informix インストールから安全に削除できるファイルにつ いて説明します。次の GLS ファイルを Informix インストールから安全に削除でき ます。 v 使用する予定がないロケールについては 、そのロケール ソースとオブジェクト ファイル (.lc と .lco) を Informix インストールの lcX サブディレクトリのサブ ディレクトリから削除できます。 lcX パス名について詳しくは、158 ページの『ロケール ファイル サブディレク トリ』を参照してください。 v 使用する予定がないコード セット変換については 、そのコード セット変換ソー スとオブジェクト ファイル (.cv と .cvo) を Informix インストールの cvY サ ブディレクトリのサブディレクトリから削除できます。 cvY パス名について詳しくは、161 ページの『コード セット変換ファイル名』を 参照してください。 警告: U.S. 8859-1 英語ロケールのロケール オブジェクト ファイル (en_us ロケー ル ファイル サブディレクトリにある 0333.lco) は 削除しないでください。 その他に、コード セット名マッピング ファイル (レジストリ) を削除しない でください。 IBM Informix 製品は、これらのファイルをすべてのロケールの 言語処理で使用します。 IBM Informix 製品はロケールおよびコード セット変換ファイルのソース バージョ ンにはアクセスしないため、これらのファイルを安全に削除することができます。 ただし、これらのファイルは、サポートされているロケールおよびコード セット変 換のための、便利なオンライン マニュアルを提供します。十分なディスク領域があ る場合は、Informix インストールがサポートする GLS ロケール (*.lc) およびコー ド セット変換 (*.cv) のソース ファイルを保持しておくことをお勧めします。 コード セット ファイルの削除 コード セット ファイルのソース バージョン (.cm) は、そのコード セット ファ イルを使用するロケールおよびコード セット変換のオンライン マニュアルとして 提供されています。 IBM Informix 製品はソース コード セット ファイルにアクセ スしないため、これらのファイルを安全に削除することができます。ただし、十分 164 IBM Informix GLS: ユーザーズ ガイド なディスク領域がある場合は、Informix インストールがサポートする GLS ロケー ルおよびコード セット変換のソース ファイルを保持しておくことをお勧めしま す。 glfiles ユーティリティ (UNIX のみ) ファイル名が MS-DOS 8.3 レガシー フォーマットに準拠するように、 IBM Informix 製品はコンデンス ファイル名を使用して GLS ロケールとコード セ ット変換ファイルを保管します。これらのファイル名は、エンド ユーザが使用する ロケール名およびコード セット名とは一致しません。 glfiles ユーティリティを使 用して次の GLS 関連ファイルのリストを生成できます。 v ご使用のシステムで利用できる GLS ロケール v ご使用のシステムで利用できる IBM Informix コード セット変換ファイル v ご使用のシステムで利用できる IBM Informix コード セット ファイル glfiles を実行する前に、次の手順を行ってください。 v INFORMIXDIR 環境変数 を、 IBM Informix 製品をインストールするディレクト リに設定します。 INFORMIXDIR を設定しない場合は、glfiles は /usr/informix ディレクトリに GLS ファイルがあるかどうかを調べます。 v glfiles によって生成されるファイルを入れたいディレクトリに移動します。 ユーティリティは、GLS ファイル リストをカレント ディレクトリに作成しま す。 次のダイヤグラムは、glfiles ユーティリティの構文を示します。 glfiles -lc -cv -cm 要素 目的 -cv glfiles ユーティリティは、利用できるコード セット変換ファイル をリストするファイルを作成します。 -lc glfiles ユーティリティは、利用できる GLS ロケールをリストする ファイルを作成します。 -cm glfiles ユーティリティは、利用できる文字マッピング (charmap) フ ァイルをリストするファイルを作成します。 コード セット変換ファイルのリスト -cv コマンド行オプションを指定すると、glfiles ユーティリティは、利用できるコ ード セット変換ファイルをリストするファイルを作成します。 $INFORMIXDIR/gls 内の各 cvY サブディレクトリごとに、glfiles は、cvY.txt と いう名前のファイルをカレント ディレクトリに作成します。ここで Y はコード セ ット変換ファイル フォーマットのバージョン番号です。 cvY.txt ファイルは、オブ ジェクト コード セット変換ファイルの名前でソートされたコード セット変換をア ルファベット順にリストします。 付録. GLS ファイルの管理 165 両方向コード セット変換の場合は、$INFORMIXDIR/gls/cvY ディレクトリに、2 つのコード セット変換ファイルが含まれます。一方のファイルがコード セット A 内の文字から、コード セット B 内のマッピングへの変換をサポートし、もう一方 のファイルが逆方向の変換 (コード セット B からコード セット A) をサポートし ます。両方向コード セット変換について詳しくは、160 を参照してください。 図 6 は、利用できるコード セット変換をリストするファイル cv9.txt を示しま す。 Filenames: cv9/002501b5.cvo and cv9/01b50025.cvo Between Code Set: Greek and Code Set: IBM CCSID 437 Filenames: cv9/00250333.cvo and cv9/03330025.cvo Between Code Set: Greek and Code Set: ISO8859-1 Filenames: cv9/033304e4.cvo and cv9/004e40333.cvo Between Code Set: 8859-1 and Code Set: 1252 図 6. Informix コード セット変換ファイルのサンプル glfiles ファイル cvY.txt ファイルを調べて、ご使用のシステム上の $INFORMIXDIR/gls/cvY ディレ クトリがサポートするコード セット変換を判別します。 GLS ロケール ファイルのリスト glfiles ユーティリティは、使用可能な GLS ロケールをリストするファイルを次の 方法で作成できます。 v -lc コマンド行オプションを指定する場合 v すべてのコマンド行オプションを省略する場合 INFORMIXDIR 内に指定された gls ディレクトリ内の各 lcX サブディレクトリご とに、glfiles は、lcX.txt という名前のファイルをカレント ディレクトリに作成し ます。ここで X はロケール オブジェクト ファイル フォーマットのバージョン番 号です。 lcX.txt ファイルは、GLS ロケール オブジェクト ファイルの名前でソー トされたロケールをアルファベット順にリストします。 図 7 は、利用できる GLS ロケールを含むサンプル ファイル lc11.txt を示しま す。 166 IBM Informix GLS: ユーザーズ ガイド Filename: lc11/ar_ae/0441.lco Language: Arabic Territory: United Arabic Emirates Modifier: greg Code Set: 8859-6 Locale Name: ar_ae.8859-6 Filename: lc11/ar_ae/0441greg.lco Language: Arabic Territory: United Arabic Emirates Modifier: greg Code Set: 8859-6 Locale Name: ar_ae.8859-6 . . . Filename: lc11/en_us/0333.lco Language: English Territory: United States Code Set: 8859-1 Locale Name: en_us.8859-1 Filename: lc11/en_us/0333dict.lco Language: English Territory: United States Modifier: dict Code Set: 8859-1 Locale Name: en_us.8859-1 Filename: lc11/en_us/0352.lco Language: English Territory: United States Code Set: PC-Latin-1 Locale Name: en_us.PC-Latin-1 Filename: lc11/en_us/04e4.lco Language: English Territory: United States Code Set: CP1252 Locale Name: en_us.CP1252 . . . 図 7. GLS ロケールのサンプル glfiles ファイル lcX.txt ファイルを調べて、ご使用のシステム上の $INFORMIXDIR/gls/lcX ディレ クトリがサポートする GLS ロケールを判別します。 Windows のみ Windows システムで利用できる GLS ロケールを見つけるには、GLS システム デ ィレクトリ内を検索する必要があります。 GLS ロケールは、次のファイルにあり ます。 %INFORMIXDIR%¥gls¥lcX¥lg_tr¥codemodf.lco このパスでは、INFORMIXDIR は、IBM Informix 製品をインストールするディレク トリを指定する環境変数で、gls は GLS システム ファイルを含むサブディレクト リです。X はロケール ファイル フォーマットのバージョン番号を表します。lg は 2 文字の言語名で、tr はロケールがサポートする 2 文字の地域名で、さらに 付録. GLS ファイルの管理 167 codemodf はコンデンス ロケール名です。 Windows のみ の終り 文字マッピング ファイルのリスト -cm コマンド行オプションを指定すると、glfiles ユーティリティは、利用できる文 字マッピング (charmap) ファイルをリストするファイルを作成します。 $INFORMIXDIR/gls 内の各 cmZ サブディレクトリごとに、glfiles は、cmZ.txt と いう名前のファイルをカレント ディレクトリに作成します。ここで Z は charmap オブジェクト ファイル フォーマットのバージョン番号です。 cmZ.txt ファイル は、GLS オブジェクト charmap ファイルの名前でソートされた文字マッピングを アルファベット順にリストします。 図 8 は、利用できる文字マッピングを含むサンプル ファイル cm3.txt を示しま す。 Filename: cm3/032d.cm Code Set: 8859-7 Filename: cm3/0333.cm Code Set: 8859-1 Filename: cm3/0352.cm Code Set: PC-Latin-1 Filename: cm3/04e4.cm Code Set: CP1252 図 8. Informix 文字マッピング ファイルのサンプル glfiles ファイル cmZ.txt ファイルを調べて、ご使用のシステム上の $INFORMIXDIR/ gls/cmZ ディ レクトリがサポートする文字マッピングを判別します。 168 IBM Informix GLS: ユーザーズ ガイド 特記事項 本書に記載の製品、サービス、または機能が日本においては提供されていない場合 があります。日本で利用可能な製品、サービス、および機能については、日本 IBM の営業担当員にお尋ねください。本書で IBM 製品、プログラム、またはサービス に言及していても、その IBM 製品、プログラム、またはサービスのみが使用可能 であることを意味するものではありません。これらに代えて、IBM の知的所有権を 侵害することのない、機能的に同等の製品、プログラム、またはサービスを使用す ることができます。ただし、IBM 以外の製品とプログラムの操作またはサービスの 評価および検証は、お客様の責任で行っていただきます。 IBM は、本書に記載されている内容に関して特許権 (特許出願中のものを含む) を 保有している場合があります。本書の提供は、お客様にこれらの特許権について実 施権を許諾することを意味するものではありません。実施権についてのお問い合わ せは、書面にて下記宛先にお送りください。 〒106-0032 東京都港区六本木 3-2-31 IBM World Trade Asia Corporation Licensing 以下の保証は、国または地域の法律に沿わない場合は、適用されません。IBM およ びその直接または間接の子会社は、本書を特定物として現存するままの状態で提供 し、商品性の保証、特定目的適合性の保証および法律上の瑕疵担保責任を含むすべ ての明示もしくは黙示の保証責任を負わないものとします。国または地域によって は、法律の強行規定により、保証責任の制限が禁じられる場合、強行規定の制限を 受けるものとします。 この情報には、技術的に不適切な記述や誤植を含む場合があります。本書は定期的 に見直され、必要な変更は本書の次版に組み込まれます。 IBM は予告なしに、随 時、この文書に記載されている製品またはプログラムに対して、改良または変更を 行うことがあります。 本書において IBM 以外の Web サイトに言及している場合がありますが、便宜のた め記載しただけであり、決してそれらの Web サイトを推奨するものではありませ ん。それらの Web サイトにある資料は、この IBM 製品の資料の一部ではありませ ん。それらの Web サイトは、お客様の責任でご使用ください。 IBM は、お客様が提供するいかなる情報も、お客様に対してなんら義務も負うこと のない、自ら適切と信ずる方法で、使用もしくは配布することができるものとしま す。 本プログラムのライセンス保持者で、(i) 独自に作成したプログラムとその他のプロ グラム(本プログラムを含む)との間での情報交換、および (ii) 交換された情報の 相互利用を可能にすることを目的として、本プログラムに関する情報を必要とする 方は、下記に連絡してください。 IBM Corporation © Copyright IBM Corp. 1996, 2003 169 J46A/G4 555 Bailey Avenue San Jose, CA 95141-1003 U.S.A. 本プログラムに関する上記の情報は、適切な使用条件の下で使用することができま すが、有償の場合もあります。 本書で説明されているライセンス・プログラムまたはその他のライセンス資料は、 IBM 所定のプログラム契約の契約条項、IBM プログラムのご使用条件、またはそれ と同等の条項に基づいて、 IBM より提供されます。 この文書に含まれるいかなるパフォーマンス・データも、管理環境下で決定された ものです。そのため、他の操作環境で得られた結果は、異なる可能性があります。 一部の測定が、開発レベルのシステムで行われた可能性がありますが、その測定値 が、一般に利用可能なシステムのものと同じである保証はありません。さらに、一 部の測定値が、推定値である可能性があります。実際の結果は、異なる可能性があ ります。お客様は、お客様の特定の環境に適したデータを確かめる必要がありま す。 IBM 以外の製品に関する情報は、その製品の供給者、出版物、もしくはその他の公 に利用可能なソースから入手したものです。IBM は、それらの製品のテストは行っ ておりません。したがって、他社製品に関する実行性、互換性、またはその他の要 求については確証できません。 IBM 以外の製品の性能に関する質問は、それらの 製品の供給者にお願いします。 IBM の将来の方向または意向に関する記述については、予告なしに変更または撤回 される場合があり、単に目標を示しているものです。 表示されている IBM の価格は IBM が小売り価格として提示しているもので、現行 価格であり、通知なしに変更されるものです。卸価格は、異なる場合があります。 本書には、日常の業務処理で用いられるデータや報告書の例が含まれています。よ り具体性を与えるために、それらの例には、個人、企業、ブランド、あるいは製品 などの名前が含まれている場合があります。これらの名称はすべて架空のものであ り、名称や住所が類似する企業が実在しているとしても、それは偶然にすぎませ ん。 著作権使用許諾: 本書には、様々なオペレーティング・プラットフォームでのプログラミング手法を 例示するサンプル・アプリケーション・プログラムがソース言語で掲載されていま す。お客様は、サンプル・プログラムが書かれているオペレーティング・プラット フォームのアプリケーション・プログラミング・インターフェースに準拠したアプ リケーション・プログラムの開発、使用、販売、配布を目的として、いかなる形式 においても、IBM に対価を支払うことなくこれを複製し、改変し、配布することが できます。このサンプル・プログラムは、あらゆる条件下における完全なテストを 経ていません。従って IBM は、これらのサンプル・プログラムについて信頼性、 利便性もしくは機能性があることをほのめかしたり、保証することはできません。 お客様は、IBM のアプリケーション・プログラミング・インターフェースに準拠し 170 IBM Informix GLS: ユーザーズ ガイド たアプリケーション・プログラムの開発、使用、販売、配布を目的として、いかな る形式においても、IBM に対価を支払うことなくこれを複製し、改変し、配布する ことができます。 それぞれの複製物、サンプル・プログラムのいかなる部分、またはすべての派生的 創作物にも、次のように、著作権表示を入れていただく必要があります。 © (お客様の会社名) (西暦年). このコードの一部は、IBM Corp. のサンプル・プ ログラムから取られています。 © Copyright IBM Corp. (西暦年 (複数可)).All rights reserved. この情報をソフトコピーでご覧になっている場合は、写真やカラーの図表は表示さ れない場合があります。 特記事項 171 商標 AIX; DB2; DB2 Universal Database; Distributed Relational Database Architecture; NUMA-Q; OS/2、OS/390、および OS/400; IBM Informix®; C-ISAM®; Foundation.2000™; IBM Informix® 4GL; IBM Informix®DataBlade®Module; Client SDK™; Cloudscape™; Cloudsync™; IBM Informix®Connect; IBM Informix®Driver for JDBC; Dynamic Connect™; IBM Informix®Dynamic Scalable Architecture™(DSA); IBM Informix®Dynamic Server™; IBM Informix®Enterprise Gateway Manager (Enterprise Gateway Manager); IBM Informix®Extended Parallel Server™; i.Financial Services™; J/Foundation™; MaxConnect™; Object Translator™; Red Brick™; IBM Informix® SE; IBM Informix® SQL; InformiXML™; RedBack®; SystemBuilder™; U2™; UniData®; UniVerse®; wintegrate® は IBM Corporation の商標です。 Java およびすべての Java 関連の商標およびロゴは、Sun Microsystems, Inc. の米国 およびその他の国における商標または登録商標です。 Windows、Windows NT および Excel は、Microsoft Corporation の米国およびその 他の国における商標です。 UNIX は、The Open Group がライセンスしている米国およびその他の国における登 録商標です。 本書で言及しているその他の会社名、製品名およびサービス名はそれぞれ各社の商 標または登録商標です。 172 IBM Informix GLS: ユーザーズ ガイド 索引 日本語, 数字, 英字, 特殊文字の 順に配列されています。なお, 濁 音と半濁音は清音と同等に扱われ ています。 重要 xi 定義 25, 29 22, 23 14, 22, 34, 48, 54, 113, 制限 アスタリスク記号 ( * ), MATCHES 演算 子 89 アルファクラス 67 アンロード ファイル 100 依存関係、ソフトウェア viii 一重引用符 ( ’ ) 66 102 引用符付き文字列 66, 75 上から下への文字方向 19 埋込み特殊文字 102 英字 9, 67 英語ロケール 25, 159 エスケープ文字 90, 102 エラー メッセージ コード セット変換 126 国際化 113 数値フォーマット 148 DATE フォーマット 148 DATETIME フォーマット 148 GLS 特有の 148 エラー メッセージ ファイル 128 エラー メッセージ用メッセージ ファイル xviii 演算子クラス 64 エンド ユーザ フォーマット 拡張 DATE フォーマット文字列 141 拡張 DATETIME フォーマット文字列 143 カスタマイズ 34 環境変数 14 時刻データ 14, 23, 34, 53, 158 時刻フォーマット修飾子 55 出力 14, 52, 56 数値データ 14, 23, 113, 157 走査 14, 56 © Copyright IBM Corp. 1996, 2003 71 コード セット変換 14 オペレーティング システム コード セット変換の必要性 4 139 および GLS 6 各国語可変長文字 (NVARCHAR) 型と の違い ロケール カテゴリ xi ESQL/C プログラム 69 44 各国語可変長文字 (NVARCHAR) 型へ の変換 44 51 大文字小文字についての SQL 関数 アジア言語サポート (ALS) 文字 (CHAR) 型との違い 文字 (CHAR) 型への変換 可変長文字 (VARCHAR) 型 12, 35, 36 日付フォーマット修飾子 変換修飾子 50, 55 製品 xi ヒント xi プラットフォーム 印刷不可能文字 データベース サーバに送信 158 アイコン xi xi 各国語文字 (NCHAR) 型 (続き) 通貨データ 14, 23, 36, 43, 113, 157 データのフォーマット 113, 130 デフォルト 日付データ [ア行] 機能 警告 エンド ユーザ フォーマット (続き) 81 33 照合順序 125 12 GLS に関する性質 環境変数 73 エンド ユーザ フォーマットの 136 ディスク領域の節約 164 文字エンコード 32 8 ビット透過 8, 47 14 クライアント ロケールの優先順位 18 サーバ処理ロケールの優先順位 28, 30 オンライン ヘルプ xvii オンライン マニュアル xvii 通貨データの優先順位 36, 145 日時 (DATETIME) 型データの優先順 位 35, 143 [カ行] 日付 (DATE) 型データの優先順位 35, 142 カーソル 4, 5, 64, 110, 126, 134 外部表 101 ロケール 106 ロケール関連 23 型が不明なデータの外部表現 型変換 (キャスト) 64 CC8BITLEVEL 38, 138 CLIENT_LOCALE 23, 39 DBCENTURY 50 121 各国語可変長文字 (NVARCHAR) 型 印刷不可能文字 71 可変長文字 (VARCHAR) 型との違い 71 可変長文字 (VARCHAR) 型への変換 44 コード セット変換 6, 125 照合順序 12, 71 正規表現内 4 説明 70 データベースへの挿入 139 マルチバイト文字 71 ESQL/C プログラム 139 各国語サプリメント (ILS) 7 各国語サポート (NLS) 4 各国語文字 (NCHAR) 型 印刷不可能文字 70 コード セット変換 6, 125 照合順序 12, 69 数値 69, 70 正規表現内 4 説明 68 データベースへの挿入 139 マルチバイト文字 69 DBDATE 40 DBLANG 40, 129 DBMONEY 43 DBNLS 43, 124 DBTIME 44 DB_LOCALE 23, 41 DELIMIDENT 66, 75 ESQLMF 45, 138 GLS 関連 38 GLS8BITFSYS 45 GL_DATE 48 GL_DATETIME 53 GL_PATH 34 INFORMIXDIR 129 SERVER_LOCALE 23, 58 関係演算子条件 85 韓国語ロケール 25 漢字文字 67 関数、大文字と小文字を区別する キーワード 構文ダイヤグラムの xiii 疑似ユーザ 65 81 173 クライアント ロケール (続き) 規則 構文記法 xi 構文ダイヤグラム マニュアル 機能アイコン NUMERIC カテゴリ TIME カテゴリ 18 xi 環境変数の設定 89 64 業界標準、準拠 xix ギリシャ アルファベット キリル アルファベット 定義 67 格納場所 クライアント ロケール 17, 25 コード セット変換 30, 33 削除 説明 サーバ ロケール ソース 21 ロケール 43 ゲートウェイと GLS 48, 49, 53 ロケール内 48, 155 区切り記号、バイト (BYTE) 型およびテ 163 15 115 クライアント アプリケーションによる 34 123 カスタム 114 警告アイコン xi 実行 32, 105, 125 シンプル ラージ オブジェクトの 結合条件 85 言語 クライアント アプリケーションの 126, 149 制限 31 データ消失エラー キスト (TEXT) 型データ 102 クライアント アプリケーション コード セット 32 データベース サーバの エンド ユーザ フォーマット 12 クライアント ロケールの使用 17 126 カーソル名の 126 各国対応エラー メッセージおよび 警告 26, 29, 125 14, 36, 96 空白 フォーマット ディレクティブ内 164 7, 162 エラー メッセージ テキストの 32 グレゴリオ暦でない暦 36, 145 163 163 リスト 168 コード セット変換 7, 16 グラフィック置換変換 グレゴリオ暦 15 95 内部フォーマット オブジェクト 23 サーバ処理ロケール 27 データベース ロケール 19 67 金額 (MONEY) 型 エンド ユーザ フォーマット 環境変数の優先順位 UTF-8 12 コード セット ファイル クライアント/サーバ環境 x xi 基本多言語面 (BMP) 32 疑問符 ( ? ) ワイルドカード 行 (row) 型 コード セット (続き) 18 データベースの デフォルト 22 17 31 データベース サーバによる テーブル名の 126 21 定義 30 不透明 (OPAQUE) 型の 19 105 112 クライアント ロケールをサーバに送信 25, 30 コード セット変換 123, 124 ロケール名 26, 42, 58, 158 現行処理ロケール 108, 117 検索関数 81 文 ID の 126 変換されたデータ 125 ミスマッチする文字 31, 162 接続の確立 接続の検査 123 26, 29, 125 コード セット クライアント アプリケーションの ミスマッチする文字の処理 31 ラージ可変長文字 (LVARCHAR) 型の 接続の要求 定義 4 19, 25 別のデータベースのオープン ロケールの検証 124 ロケールのサポート 4, 7 31, 123 クライアント コード セット 29, 125 決定 24, 31 コード ポイント 互換性 4 31 8, 72 ロケールの設定 7, 18, 23 クライアント コード セット 31, 123, 互換性がない コンデンス名 124 クライアント コンピュータ クライアント コード セット 30 コード セット変換ファイル 124 CLIENT_LOCALE の設定 23 DB_LOCALE の設定 23 クライアント ロケール カスタマイズ 34 決定 18 コード セット 31, 123 サンプル 18 設定 23 データベース サーバに送信 25 定義 17 COLLATION カテゴリ 18 CTYPE カテゴリ 18 ESQL/C ソース ファイル 134 MESSAGES カテゴリ 158 MONETARY カテゴリ 18 サーバ コード セット 31 シングルバイト 8, 77, 79, 91 ソース 30, 31 ターゲット 30, 31 データベース コード セット 31 データベース サーバの 31, 123 データベースの 31, 123 定義 8 デフォルト 9, 22, 24 ファイル名への影響 47 変換可能 24, 124, 125 マルチバイト 9, 77, 78, 92, 130 文字クラス 9 ロケール名 22, 26, 42, 58 ワイド文字フォーム 111 1252 8 8859-1 8, 22, 159 ASCII 8, 22 GB18030-2000 9 174 IBM Informix GLS: ユーザーズ ガイド 124 20, 22, 34, 159 126 両方向 162 列名の 126 レジストリ ファイル 163, 164 CLIENT_LOCALE のロール 105, 124 DataBlade API による 111 DB_LOCALE のロール 105, 124 ESQL/C プログラム 148 SERVER_LOCALE のロール SQL データ型の 125 SQL 文の 126 コード セット変換ファイル オブジェクト 161, 164 格納場所 161 削除、未使用の 164 説明 7, 160 ソース 32, 161, 164 リスト 124, 165 コード ポイント 8, 10, 72 コード、サンプル、規則 xiv コード例の表記 xiv 広域言語サポート (GLS) 43 構成パラメータ 104 構文ダイヤグラム キーワード xiii 規則 xi 105 構文ダイヤグラム (続き) 変数 国際化 時刻データ エンド ユーザ フォーマット xiv 34, 158 エラー メッセージ 113, 130 定義 126 トレース メッセージの 文字の処理 環境変数の優先順位 113 データのフォーマット 117 ロケール特有の システム要件 引数 107 コマンド行の規則 実数 (FLOAT) 型 シノニム 65 読み方 34 コメント アイコン x 制約 viii コメント標識変数 76 業界標準への サーバ コード セット サーバ コンピュータ 31 サーバ コード セット 30 DB_LOCALE の設定 23 SERVER_LOCALE の設定 23 サーバ ロケール 31 xi 環境変数の優先順位 決定 27 コード セット変換 時刻データ 29 118 28, 30 105 初期化 27 数値データ 29 通貨データ 29 定義 27 日付データ 29 ファイル名検査 105 例外メッセージの 117 ローカライズ順の照合 28 COLLATION カテゴリ 29 CTYPE カテゴリ 29 MESSAGES カテゴリ 30 MONETARY カテゴリ 30 NUMERIC カテゴリ 30 TIME カテゴリ 30 UDR および 109 サブ文字列 76, 80 シーケンス 64 識別子 区切り記号付き 63 非 ASCII 文字 63 64, 110, 134 viii [タ行] 代替フォーマット xix 時刻 日付 55, 143 50, 141 台湾における日付 15, 35 関係演算子 85 BETWEEN 86 地域 22, 26, 39, 42, 58, 158 置換変換 31 チャンク 63 IN 87 LIKE 89 中国語ロケール MATCHES 87 照合 各国語可変長文字 (NVARCHAR) 型 71 各国語文字 (NCHAR) 型 定義 21 トレース メッセージの サーバ処理ロケール 157 ソフトウェア依存関係 36, 157 小桁実数 (SMALLFLOAT) 型 157 小桁整数 (SMALLINT) 型 157 条件 [サ行] 25 4, 20 整数 (INTEGER) 型 製品アイコン xi 20 重要パラグラフのアイコン 準拠 70 14 スキーマ名 65 スペイン語ロケール 正規表現 射影節 79 xii 38, 39, 76, 134 コード セット 使用 103 設定 23 数値表記 4, 13 システム カタログ コマンド行 3 桁区切り記号 14, 23, 145, 156 ESQL 関数 144 数値内のゼロ 36, 143 フォーマット 157 フォーマットのカスタマイズ DBTIME 44 GL_DATE 53 110, 129 C UDR および 108 UDR および 108 コメント 数値データ (続き) 23, 29, 重量 定義 69 155 9 等価クラス 11, 84, 87, 89, 156 文字データ 81 Unicode 照合 12 照合順序 影響を受けるタスク 9 コード セット 10, 12, 72 タイプ 10 ローカライズ済み 4, 10, 12, 28, 39, 42, 58, 72 小数点記号 14, 23, 97, 145, 155, 156, 157 省略形 15 所有者名 65 シングルバイト文字 8, 77, 79 診断ファイル 21, 103 シンプル ラージ オブジェクト 101 数値データ エンド ユーザ フォーマット 13, 23, 29, 157 小数点記号 14, 23, 145, 156 正 14, 23, 156 通貨表記 144 負 14, 23, 156 フォーマット 156 ロケール特有の 4 25 通貨記号 14, 23, 97, 145, 157 通貨データ エンド ユーザ フォーマット 23, 29, 36, 157 環境変数の優先順位 36, 145 小数点記号 14, 23, 97, 145, 157 正 14, 23, 157 通貨記号 14, 23, 97, 145, 157 通貨表記 13, 97, 157 デフォルト小数点以下桁数 96 負 14, 23, 157 フォーマット 157 ロケール特有の 4 3 桁区切り記号 14, 23, 97, 145, 157 通貨表記 14, 36, 43 データ 転送 27 破損 18, 19 変換 125 文字 68 データ型 各国語可変長文字 (NVARCHAR) 型 6, 70, 125, 139 各国語文字 (NCHAR) 型 6, 68, 125, 139 可変長文字 (VARCHAR) 型 73, 125 コード セット変換 125 実数 (FLOAT) 型 157 小桁実数 (SMALLFLOAT) 型 157 小桁整数 (SMALLINT) 型 157 照合順序 12 数値 157 整数 (INTEGER) 型 157 索引 175 データ型 (続き) データベース サーバ (続き) ディスティンクト 97 テキスト (TEXT) 型 74, 126 メッセージ ログ ファイル 文字データの解釈 19 内部フォーマット ユーティリティ 12 104 [ナ行] 二重引用符 ( ″ ) 66 日時 (DATETIME) 型 エンド ユーザ フォーマット 4, 106 日時 (DATETIME) 型 158 ログ ファイル名 バイト (BYTE) 型 126 バイナリ ラージ オブジェクト ロケールのサポート 4, 7 ロケールの設定 7, 23 拡張フォーマット文字列 DB_LOCALE の使用 環境変数の優先順位 36, 143 内部フォーマット 15 (BLOB) 型 98 日付 (DATE) 型 複合 97 不透明 警告 検証 文字ラージ オブジェクト (CLOB) 型 サンプル ラージ可変長文字 (LVARCHAR) 型 命名 ロケールを区別する 19, 28, 68, 95, 139 10 進数 (DECIMAL) 型 157 データベース アンロード 62 照合順序 部分文字 命名 62 データベース コード セット 20, 26 31, 123, 124 データベース サーバ エンド ユーザ フォーマット 13 オペレーティング システム ファイル 103 クライアント ロケールの使用 25, 26 コード セット変換 33, 105 サーバ ロケールの使用 21, 103 サーバ処理ロケールの決定 25, 27 サンプルの接続 16 識別子 63 照合 12 診断ファイル 103 接続の検査 25, 123 チャンク名 63 データベース ロケールの検証 26, 29 内部フォーマット 12 マルチバイト ファイル名 63 マルチバイト文字 106 117 12 80 15, 35 118 126, 148 バイナリ ラージ オブジェクト (BLOB) 型、検索 98 ハイパフォーマンス ローダ (HPL) パス名 63, 66 パラメータ マーカ 117 範囲一致 88 非 ASCII 文字 インデックス名内 引用符付き文字列内 101 64 75 クライアント アプリケーションの 23 データベース サーバの 23 デフォルト コード セット 22, 24, 演算子クラス名内 64 カーソル名内 4, 5, 64, 110, 134 型変換 (キャスト) 名内 64 160 必須 164 行 (ROW) 型名内 64 区切り識別子内 63 コメント内 38, 39, 134 サポート 25 シーケンス名内 64 シノニム名内 65 処理 38, 137 所有者名内 65 制約名内 64, 110, 134 接続名内 64 データベース名内 64, 110, 134 定義 8 ディスティンクト (distinct) 型名内 64 トリガ内 65 トリガ名内 65 ビュー名内 4, 5, 65, 110, 134 標識変数内 5, 134 表名内 4, 5, 65, 110, 134 ファイル名内 46, 64, 110, 134 フィルタ処理 136 ロケール名 22 デモンストレーション データベース viii トークン名 118 ドイツ語ロケール 18, 21, 25, 159 統一中国語コード セット (GB18030) 9, 32 ドキュメント ノート xviii トリガ 65 ドル記号 ($) 識別子内 62 書式制御文字 146 通貨記号 155 トレース トレース ブロック 118 トレース メッセージ 120 GL_DPRINTF マクロ 118 gl_tprintf() 関数 118 トレース ブロック 118 トレース メッセージ 117 IBM Informix GLS: ユーザーズ ガイド 24, 25, 29, 125 日本元号の日付 認証識別子 65 コード セット変換 部分文字 80 GLS に関する性質 74 デフォルト ロケール viii ロケール情報の保存 20 データベース オブジェクト および DB-Access 5 142 67 日本語ロケール パーセント (%) 記号 バイト (BYTE) 型 定義 19 UDR トレース メッセージの 100 54 [ハ行] ディスティンクト (distinct) 型 64 テキスト (TEXT) 型 コード セット変換 126, 148 命名 64, 110, 134 ロード 99 176 64 システム カタログ内 設定 23 可変長文字 (NVARCHAR) 型 44 文字 (CHAR) 型と各国語文字 (NCHAR) 型 44 データ消失エラー 31 データ定義言語 (DDL) 18 18 検証 19, 26, 29 コード セット 31, 123 互換性がない 26 データ型の変換 可変長文字 (VARCHAR) 型と各国語 元号ベース日付 35 ESQL ライブラリ関数 日本語 UJIS ロケール 例 21 データベース ロケール 148 143 フォーマット ディレクティブ 25 26 25, 26, 29, 123 サーバ処理ロケール 98 74, 121 ロケータ構造体 20 クライアント ロケール情報 72, 125 23, 34, 44, 53, 158 データベース サーバ接続 確立 25, 123 158 97, 112, 120 文字 68 文字 (CHAR) 型 63 非 ASCII 文字 (続き) ファイル (続き) 不透明 (opaque) 型名内 64 文識別子内 4, 5, 64, 110, 134 ホスト変数内 5, 64, 134 リテラル文字列内 列名内 例 24 UNLOAD TO ファイル拡張子 .c 38, 39, 110, 134 4, 5, 64, 110, 134 ロール名内 100 マイナス記号 (-) 単項演算子 マシン ノート 129, 138 .cm 163, 165 .cvo .c_ 138 .ec 129, 138 GLS8BITFSYS 環境変数 .iem 46 大文字小文字の切り替え SQL コメント内 .o UNLOAD TO ファイル内 左から右への文字方向 日付 (DATE) 型 生成 100 内 エンド ユーザ フォーマット 22, 34, 40, 48, 158 拡張フォーマット文字列 141 環境変数の優先順位 35, 142 内部フォーマット 12, 15 46, 135 日付データ エンド ユーザ フォーマット 34, 158 空白 49 フィールド仕様 22, 29, 環境変数の優先順位 35, 142 代替フォーマット 50 フォーマット 157 フォーマットのカスタマイズ 無効な文字 46 7 ビット透過 46 8 ビット透過 8 フォーマット 130 フォーマット ディレクティブ 140 複数文字照合要素 符号なし short 型 34 51, 52, 56 フィールドの精度 52, 56 フィールドの幅 52, 56 変換修飾子 35, 51 GL_DATE 49 GL_DATETIME 54 156 111 ロケール特有の 4, 13 GL_DATE の設定 48 ビュー 4, 5, 65, 110, 134 不透明 (opaque) 型 識別子 64 太文字 x 表 (データベース) 外部 101 部分文字 78, 130 ブラケット { } コード セット変換 126 命名 4, 5, 65, 110, 134 標識変数 5, 134, 135 非ラテン アルファベット 67 ヒント アイコン xi ファイル 診断 21, 103 テキスト 99 メッセージ 21, 33, 34, 40 レジストリ 7, 163, 164 ログ 21, 104 ロケール オブジェクト ファイル ロケール ソース ファイル 159 cmZ.txt 168 cvY.txt 165 Informix プロプラエタリ 21 lcX.txt 166 LOAD FROM 100 sqexplain.out 21 サブ文字列演算子 76 MATCHES 演算子での範囲 88 プラットフォーム アイコン xi フランス語ロケール 13, 14, 25, 29, 39, 42, 58, 67, 125, 159 プログラム グループ xviii 文識別子 4, 5, 64, 110, 126, 134 平成 15 別名 7, 64 ヘルプ xvii 変換関数 130 変換修飾子 35, 50, 55 変数、構文ダイヤグラム内の xiv ホスト変数 エンド ユーザ フォーマット 12 命名 5, 64, 134 ESQL/C 例 134, 135 159 71 各国語文字 (NCHAR) 型列内 関数名内 64 妥当性検査 105 非 ASCII 46, 63, 64, 110, 134, 135 19 元号ベース日付 35 ESQL ライブラリ関数 各国語可変長文字 (NVARCHAR) 型列 138 ファイル名 109 148 カーソル名内 4, 5, 64, 110, 134 型変換 (キャスト) 名内 64 41 .lc 159, 161, 164 .lco 159, 164 UDR ソース ファイル内 64 引用符付き文字列内 75 演算子クラス名内 64 LOAD FROM ファイル内 100 SPL ルーチン内 5, 64, 65 76 111 インデックス名内 161, 164 CC8BITLEVEL 環境変数 38 ESQL ファイル名内 135 155 xviii マルチバイト文字 .cmo 163 .cv 32, 161, 164 64 [マ行] 64, 97, 112, 120 行 (ROW) 型名内 69 64 区切り識別子内 63 コメント内 38, 39, 134 サポート 25 シーケンス名内 64 シノニム名内 65 処理 38, 129, 137 所有者名内 65 数値フォーマットの 制約名内 接続名内 144 64, 110, 134 64 データ型名内 64 データベース サーバ ファイル名内 63 データベース サーバ ユーティリティ における 106 データベース名内 定義 8 64, 110, 134 トリガ内 65 トリガ名内 65 ビュー名内 4, 5, 65, 110, 134 標識変数内 5, 134 表の別名内 64 表名内 4, 5, 65, 110, 134 ファイル名内 25, 46, 64, 110, 134 フィルタ処理 136 不透明 (opaque) 型名内 64 部分文字 78, 130 プロシジャ名内 64 文識別子内 4, 5, 64, 110, 134 ホスト変数内 5, 64, 134 リテラル文字列内 38, 39, 110, 134 ルーチン名内 64 列サブ文字列 77 列名内 4, 5, 64, 110, 134 ロール名内 64 C コンパイラによるサポート 109, 136 CC8BITLEVEL 環境変数 38 ESQL ファイル名内 135 索引 177 マルチバイト文字 (続き) DBTIME フォーマット DELETE 文内 99 SPL ルーチン内 5, 64, 65 GL_DATE フォーマット SQL コメント内 76 GL_DATETIME フォーマット UNLOAD TO ファイル内 右から左への文字方向 19 民国年形式 100 15, 35 メッセージ ファイル 格納場所の指定 34, 40 言語特有 34 およびコード セット変換 非 ASCII 文字 47 GLS に関する性質 74 TRIM サポートなし 152 文字の大文字小文字のシフト 7 ビット 8 ラウンド トリップ変換 リソース ファイル リテラル一致 117 IBM Informix GLS API および GLS 6 各国語文字 (NCHAR) 型との違い 各国語文字 (NCHAR) 型への変換 コード セット変換 125 69 44 72 文字データ 解釈 19, 28 照合 28, 81, 155 データ型 68 等価文字 11, 84, 87, 156 破損の回避 125 変換 30, 125 マッピング 153 ロケールを使用した処理 4 ESQL 関数 148 文字方向 19 文字マッピング ファイル 168 元号年形式 15 元号ベース日付 拡張フォーマット文字列 141, 143 サンプル 15 定義 15 ロケールに定義済み 157 DATE フォーマット関数 140 DATETIME フォーマット関数 142 DBDATE フォーマット 140 IBM Informix GLS: ユーザーズ ガイド 128 87, 89 列 (データベース) 109 リテラル文字列 110 例外メッセージ 113 ロケール サポート 108 SQL 識別子名 110 ユーティリティ データベース サーバ 31 リテラル文字列 12, 38, 39, 110, 134 リリース ノート xviii 108 非 ASCII ソース コード ファイル名 110 文字列 110, 111 8 ビット 8 ASCII 8 文字 (CHAR) 型 121 ランタイム エラー、カスタム メッセージ 114 64 トレース メッセージ 148 12 不透明 (OPAQUE) 型の表記 99 現行処理ロケール 108 コード セット変換 111 部分 78, 130 ミスマッチ 31, 162 126 UPDATE 文内 各国対応 33 および GLS 6 コード セット変換 照合順序 ユーザ定義ルーチン (UDR) 文字 印刷不可能 70, 71 シングルバイト 8, 77 178 35 ユーザ定義プロシジャ 64 ユーザ定義ルーチン 64 メッセージ ログ 照合順序 12 GLS に関する性質 文字セット 8, 163 ラージ可変長文字 (LVARCHAR) 型 35, 50 INSERT 文内 99 SQL 文内 99 ユーザ定義関数 128 ローカライズ済み 143 [ヤ行] 40 コンパイル済み 41 実行時に探索 41 要件 [ラ行] 元号ベース日付 (続き) GLS8BITFSYS 環境変数 46 LOAD FROM ファイル内 100 コード セット変換 126 サブ文字列 76, 80 表現式 76 命名 4, 5, 64, 110, 134 レジストリ ファイル 7, 163, 164 ローカライゼーション 127 ローダ、非 ASCII 文字のサポート ロード ファイル 100 110 4 データベース サーバ ユーティリティ 106 マルチバイト文字のサポート 106 chkenv 107 dbexport 5, 107, 108 dbimport 107, 108 dbload 107 dbschema 107 DB-Access 5, 108 glfiles 39, 42, 58, 124, 165 onaudit 107 oncheck 107 onload 107 onlog 107 onmode 5 onpload 107 onshowaudit 107 onspaces 107 onstat 107 onunload 107 onutil 107 SQL ユーティリティ 107 ロール 64 ログ ファイル 101 21, 104 ログ ファイル名、非 ASCII 文字 ロケータ構造体 149 ロケール アルファクラス 67 カスタム メッセージの 116 環境変数 23 現行 128 現行処理 108, 117 検証 26, 29 設定 15, 23 選択 128 データベース サーバ接続の 25 定義 7 デフォルト viii トレース メッセージの 120 非 ASCII 文字 24 ファイル名 158, 159 文字クラス 9 リスト 39, 42, 58, 165 ロケール カテゴリ 14, 154 en_us.8859-1 viii ロケール ファイル オブジェクト 159, 164 格納場所 16, 158 削除、未使用の 164 説明 7, 16, 154 ソース 159, 164 必須 164 リスト 39, 42, 58, 165, 166 63 ロケール環境変数 ロケール修飾子 ロケール名 言語名 CLIENT_LOCALE 環境変数 (続き) 106 26, 39, 42, 58, 159 構文 26, 39, 42, 58, 158 コード セット名 コード セット変換でのロール 124 D 105, DataBlade Developers Kit (DBDK) DBCENTURY 環境変数 DBDATE 環境変数 39 コマンド行引数を解釈する 107 地域名 26, 39, 42, 58, 158 例 39, 42, 58 設定 23 データベース サーバに送信 構文 40 25 設定 35 ロケール修飾子名 テキスト (TEXT) 型データ 69, 71, 元号ベース日付 35, 99 優先順位 18, 30, 35, 142 22, 26, 39, 42, 58 26, 39, 42, 58, 159 ロケールを区別するデータ型 27 111 89 [数字] 0000 年 15 1 から始まる計数方法 27 16 進数字 101 3 桁区切り記号 14, 23, 97, 145, 156, 157 8, 45, 136 DBMONEY 環境変数 構文 43 設定 36 CREATE EXTERNAL TABLE 文 CREATE FUNCTION 文 64 ALTER TABLE 文 95 ANSI 標準準拠 dbschema ユーティリティ DBTIME 環境変数 2 構文 44 設定 35 元号ベース日付 101 ASCII 文字 (a - z、A - Z) 67 B 86 C C コンパイラ 制限 109, 136 非 ASCII ソース コード 109, 136 非 ASCII ファイル名 136 マルチバイト文字 109, 136 8 ビット透過 109, 136 CC8BITLEVEL 環境変数 3, 38, 136, 138 CHARACTER_LENGTH 関数 90 CHAR_LENGTH 関数 94 chkenv ユーティリティ 107 CLIENT_LOCALE 環境変数 2 CREATE ROW TYPE 文 64 CREATE SEQUENCE 文 64 CREATE SYNONYM 文 65 CREATE TABLE 文 68 金額 (MONEY) 型列 95 制約名 64 データベース オブジェクトの名前 表名 65 列名 64 CREATE TRIGGER 文 65 CREATE VIEW 文 65, 68 CTYPE ロケール カテゴリ 空白文字 48, 53 クライアント ロケールの 18 サーバ処理ロケールの 29 説明 154, 155 文字ケース 148 ロケール ソース ファイル内 159 cvY.txt ファイル 165 99 DB-Access ユーティリティ DB_LOCALE 環境変数 2 CREATE OPCLASS 文 64 CREATE PROCEDURE 文 64, 65 CREATE ROLE 文 64 76 107 優先順位 18, 30, 36, 143 ESQL ライブラリ関数 143 CREATE INDEX 文 62, 64, 82 CREATE OPAQUE TYPE 文 64 所有者名の指定 65 レベル xix ASCII コード セット 8, 22 25 ESQL ライブラリ関数 145, 147 DBNLS 環境変数 43, 69, 124 159 CREATE CAST 文 64 CREATE DATABASE 文 64, 67 CREATE DISTINCT TYPE 文 64 A 107 2 通貨記号の定義 147 データベース サーバに送信 優先順位 18, 30, 36, 145 29 ロケール ソース ファイル内 CONNECT 文 64 41 dbload ユーティリティ cmZ.txt ファイル 168 COLLATION ロケール カテゴリ クライアント ロケールの 18 サーバ処理ロケールの 説明 154, 155 3, 129 40 設定 34 優先順位 115 39 ESQL ソース コード 129 ESQL ファイル名 129 10 進数 (DECIMAL) 型 36, 157 16 進エンコード 101 引用符 66 コメント標識変数 構文 例外メッセージでのロール 140 dbexport ユーティリティ 5, 46, 107, 108 dbimport ユーティリティ 107, 108 DBLANG 環境変数 144, 145 ロケール名の例 BETWEEN 条件 41 ユーティリティ 106 優先順位 18, 30, 35, 36, 41, 142, ワイルドカード文字 8 ビット透過 ESQL ライブラリ関数 23 メッセージ ファイルの格納場所 [ワ行] ワイド文字 73, 75 デフォルト値 112 50 62 viii, 5, 108 決定する情報 19, 21 コード セット変換でのロール 105, 124 構文 41 設定 23 データベース ロケールの検証 26 デフォルト値 23 ユーティリティ 106 優先順位 28 例外メッセージでのロール 115 ロケール名の例 42 DECLARE 文 64 DELETE 文 元号ベース日付 99 GLS 考慮事項 98 WHERE 節条件 98, 99 DELIMIDENT 環境変数 66, 75 DESCRIBE 文 150 dtcvfmasc() ライブラリ関数 142 dttofmtasc() ライブラリ関数 142 DUMP* 構成パラメータ 104 索引 179 ESQL/C プロセッサ E en_us.8859-1 ロケール viii ESQL ライブラリ関数 数値フォーマット関数 通貨表記 文字列関数 オペレーティング システム ファイル 129 144 145, 146 148 GLS エンハンスメント 金額 (MONEY) 型データの優先順位 145 日時 (DATETIME) 型データの優先順 位 143 日付 (DATE) 型データの優先順位 142 dtcvfmtasc() 142 dttofmtasc() 142 148 6, 126, 139 非 ASCII 文字 137 CC8BITLEVEL 138 CC8BITLEVEL 環境変数 38 ESQLMF 45, 137 ESQL/C プリプロセッサ 17, 136 ESQL/C プログラム 各国語可変長文字 (NVARCHAR) 型へ のアクセス 139 各国語文字 (NCHAR) 型データへのア クセス 139 コード セット変換の処理 148 コメント 38, 39, 134 コンパイル 137, 138 データ型定数 149, 152 データベース接続の検査 26 データベースへのシンプル ラージ オ ブジェクトの書込み 148 標識変数 134 ファイル名 134 ホスト変数 17, 134 リテラル文字列 13, 17, 38, 39, 134 39, 137 GL_DATETIME 環境変数 構文 21 2 53 設定 35 データベース サーバに送信 25 フォーマット ディレクティブ FETCH 文 xviii, 148 GB18030-2000 コード セット glfiles ユーティリティ 優先順位 18, 30, 36, 143 ESQL ライブラリ関数 gl_dprintf() 関数 117 9, 32 コード セット ファイル 168 コード セット変換ファイル 124, 165 構文 165 出力例 166, 167, 168 ロケール ファイル 39, 42, 58, 166 charmap ファイル 168 -cm オプション 168 -cv オプション 165 -lc オプション 166 GLS 機能 各国語可変長文字 (NVARCHAR) 型 70 各国語文字 (NCHAR) 型 68 可変長文字 (VARCHAR) 型 73 環境変数 38 基本機能 1 クライアント/サーバ環境 7, 16 ゲートウェイ 34 使用可能なロケール 39, 42, 58 説明 1 テキスト (TEXT) 型 74 ホスト変数の文字データ型 139 文字 (CHAR) 型 72 文字データ型の使用 68 リストされた機能 3 DataBlade モジュール 5 ESQL ライブラリ関数 140 GLS ファイル 158, 161, 163 GLS ファイルの管理 153 GLS ライブラリ 1 SQL 61 GLS ロケール ファイル 7 GLS8BITFSYS 環境変数 3, 45 GLS_COLLATE 表名 20 54 元号ベースの日時 35 元号ベース日付 99 64 finderr ユーティリティ IBM Informix GLS: ユーザーズ ガイド 48 優先順位 18, 30, 35, 142 ESQL ライブラリ関数 140 39 F 137 136 25 フォーマット ディレクティブ 元号ベース日付 35, 99 46, 135 G rfmtlong() 144, 145 rstrdate() 140 rupshift() 148 180 データベース サーバに送信 Explain ファイル rfmtdec() 144 rfmtdouble() 144 起動 説明 35 非 ASCII ソース コード 137 非 ASCII ファイル名 46, 135 ESQLMF 45, 137 ESQL/C フィルタの起動 rdownshift() 148 rfmtdate() 140, 141 ESQL/C データ型 ESQL/C フィルタ 48 設定 CC8BITLEVEL 140 ESQLMF 環境変数 3, 45, 137 ESQL/C 関数ライブラリ GLS エラー メッセージ rdatestr() 140 rdefmtdate() 140, 141 構文 定義 129 マルチバイト文字 DATE フォーマット関数 140 DATETIME フォーマット関数 142 GLS_CTYPE 表名 20 GL_DATE 環境変数 2 143 GL_DPRINTF() トレース関数 GL_PATH 環境変数 34 118 gl_tprintf( ) 関数 117 gl_tprintf() トレース関数 118 gl_wchar_t データ型 111 H HKEY_LOCAL_MACHINE レジストリ設 定 59, 106 I IBM CCSID コード セット 定義 32 437 819 32, 161 159, 160, 161, 162, 163 IBM Informix Client Software Developer’s Kit 123 IBM Informix Dynamic Server, パス名 63 IBM Informix Extended Parallel Server ハイパフォーマンス ロード 101 パス名 63 IBM Informix GLS API 5, 110 IN 条件 87 Index 64 INFORMIXDIR 環境変数 129 コード セット ファイルの格納場所 163, 168 コード セット変換ファイルの格納場所 161, 165 メッセージ ファイルの格納場所 40, 41 レジストリ ファイルの格納場所 163 ロケール ファイルの格納場所 16, 158, 166 INFORMIXDIR 環境変数 (続き) charmap ファイルの格納場所 glfiles 165 INFORMIXDIR/bin ディレクトリ INITCAP 関数 mi_exec_prepared_statement() 関数 mi_get_string() DataBlade API 関数 ix MI_LIST_END トレース定数 mi_interval_to_string() 関数 埋込み SELECT 75 GLS 考慮事項 13 8 ISO 8859-1 コード セット viii 112 113 mi_string_to_date() DataBlade API 関数 L loc_buffer フィールド 150 loc_t データ型 148, 149 loc_type フィールド 149 LOWER 関数 75, 81 lower クラス 111 9 M malloc( ) システム呼出し 151 MATCHES 関係演算子 10, 87 MESSAGES ロケール カテゴリ サーバ処理ロケールの 30 説明 155, 158 ロケール ソース ファイル内 159 mi_convert_from_codeset() DataBlade API 関数 112 mi_convert_to_codeset() DataBlade API 関 数 112 mi_datetime_to_string( ) 関数 113 mi_date_to_string() DataBlade API 関数 113 mi_db_error_raise() 関数 113, 115 mi_decimal_to_string() DataBlade API 関数 113 mi_exec( ) 関数 115 mi_exec() 関数 109 62 rfmtdouble() ライブラリ関数 rgetmsg( ) ライブラリ関数 129 rstrdate() ライブラリ関数 140 rupshift() ライブラリ関数 148 S sales_demo データベース SELECT 文 N NUMERIC ロケール カテゴリ エンド ユーザ フォーマット 156 クライアント ロケールの 18 サーバ処理ロケールの 30 O OCTET_LENGTH 関数 92 onaudit ユーティリティ 107 oncheck ユーティリティ 107 ONCONFIG 構成パラメータ 1 onload ユーティリティ 107 onlog ユーティリティ 107 onmode ユーティリティ 5 onpload ユーティリティ 107 onshowaudit ユーティリティ 107 onspaces ユーティリティ 107 onstat ユーティリティ 107 onunload ユーティリティ 107 onutil ユーティリティ 107 ORDER BY 節 (SELECT) 10, 83 75 150 長さ関数の使用 90 範囲を使用した一致の指定 文字データの照合 82, 83 88 リテラル一致の指定 87, 89 LIKE キーワード 89 MATCHES 関係演算子 87 145 ロケール ソース ファイル内 ix 引用符付き文字列の指定 埋込み 98, 99 照合順序 9 選択リスト列 数値フォーマット関数 説明 155, 156 代替数字 51, 55, 157 144 18 30 145 通貨記号 146 ロケール ソース ファイル内 159 MSGPATH 構成パラメータ 47, 104 LIBMI アプリケーション 5 LIKE 関係演算子 10, 89 LOAD 文 64, 98, 100 121 rfmtlong() ライブラリ関数 144, 145 rgetlmsg( ) ライブラリ関数 129 サーバ処理ロケールの 数値フォーマット関数 説明 155, 157 lcX.txt ファイル 166 LENGTH 関数 90 receive( ) 関数 mi_string_to_money() DataBlade API 関数 クライアント ロケールの LANG 環境変数 優先順位 41 13, 140 rdefmtdate() ライブラリ関数 140, 141 rdownshift() ライブラリ関数 148 rfmtdate() ライブラリ関数 140, 141 rfmtdec() ライブラリ関数 144 MONETARY ロケール カテゴリ エンド ユーザ フォーマット 157 141 rdatestr() ライブラリ関数 RENAME COLUMN 文 113 ja_jp.sjis ロケール R mi_string_to_decimal() DataBlade API 関数 113 mi_string_to_interval() 関数 113 mi_wchar データ型 J 64 119 113 98 VALUES 節 99 International Components for Unicode (ICU) mi_string_to_datetime() 関数 P PREPARE 文 113 mi_put_string() DataBlade API 関数 98 エンド ユーザ フォーマット 元号ベース日付 99 112 mi_money_to_string() DataBlade API 関数 113 mi_prepare() 関数 109 75, 81 INSERT 文 引用符付き文字列の指定 109 168 ORDER BY 節 159 10, 83 TRIM の使用 81, 151 WHERE 節 9, 85 send( ) 関数 121 SERVER_LOCALE 環境変数 2, 58 コード セット変換でのロール 105 構文 58 設定 23 データベース サーバ ファイル名 104 デフォルト値 23 メッセージ ファイルの格納場所 41 ユーティリティ 106 優先順位 41 ロケール名の例 58 SET COLLATION 文 11, 42, 81, 88, 156 SET EXPLAIN 文 21 SPL ルーチン 4, 5, 65 SQL API 製品 コメント 134 ファイル名 134 ホスト変数 134 リテラル文字列 134 索引 181 SQL API 製品 (続き) UNIX 環境 (続き) sqlca 構造体 ESQL ライブラリ エンハンスメント 140 警告文字 26 接続の警告 26 GLS8BITFSYS の使用 46 sqlerrm SQL 識別子名 SQLWARN 配列 SQL コード SQL 識別子 134 xiv 所有者名 65 非 ASCII 文字 sqlda 構造体 63 110, 134 62 例 67 SQL セグメント 埋込み SELECT 26, 29 65 SET 節 sqlda.sqlvar.sqlname フィールド UTF-8 コード セット SQLTEXT データ型定数 分類 90 sqlvar_struct 構造体 説明 150 列データの保管 94 コード セット変換 データ操作 98 64 CREATE DISTINCT TYPE 64 CREATE EXTERNAL TABLE 101 CREATE FUNCTION 64 CREATE INDEX 62, 64, 82 CREATE OPAQUE TYPE 64 150, 151 syserrors システム カタログ表 114, 116 systables システム カタログ表 20 systracemsgs システム カタログ表 117, 119, 120 85 DELETE 文内 86 98 IN 条件 87 INSERT 文内 98 UNLOAD 文内 99 UPDATE 文内 99 Windows デフォルト ロケール viii Windows 環境 サポートされるコード セット変換 124 デフォルト ロケール 22 TIME ロケール カテゴリ エンド ユーザ フォーマット 158 クライアント ロケールの 18 サーバ処理ロケールの 30 説明 155, 157 元号情報 51, 55, 157 ロケール ソース ファイル内 TRIM 関数 75, 81, 151 X xctl ユーティリティ 107 X/Open 準拠レベル xix 159 U Unicode 基本多言語面 (BMP) 32 照合アルゴリズム 12 UTF-8、UTF-16、および UTF-32 コー ド セット 8 UNIX オペレーティング システム デフォルト ロケール viii UNIX 環境 サポートされるコード セット変換 124 サポートされるロケール 39, 42, 58 デフォルト ロケール 22 IBM Informix GLS: ユーザーズ ガイド 111 照合順序 9 論理的述部 85 BETWEEN 条件 stores_demo データベース viii superstores_demo データベース ix T 182 26 関係演算子条件 SQLVCHAR データ型定数 152 SQLWARN 警告フラグ 26, 29, 125 CREATE ROLE 64 CREATE ROW TYPE 64 CREATE SEQUENCE 64 CREATE VIEW 65 DECLARE 64 DELETE 98 DESCRIBE 150 FETCH 64 LOAD 64, 98, 100 PREPARE 64 RENAME COLUMN 62 SELECT 79 SET COLLATION 81, 88, 156 SET EXPLAIN 21 UDR 内 109 UNLOAD 98, 100 UPDATE 98 SQL ユーティリティ 107 SQLBYTES データ型定数 149 SQLCA 構造体 SQLWARN 配列 125 W 警告文字 wchar_t データ型 WHERE 節 CREATE OPCLASS 64 CREATE PROCEDURE 64, 65 CREATE SYNONYM 65 CREATE TRIGGER 65 8 W 149, 152 sqldata フィールド 150 sqllen フィールド 151 sqlname フィールド 151 13 109, 126 151 152 149 sqltypes.h ヘッダ ファイル OCTET_LENGTH 92 SQL 文 エンド ユーザ フォーマット 99 WHERE 節条件 99 UPPER 関数 75, 81 90 CONNECT 64 CREATE CAST 26 sqlda.sqlvar.sqldata フィールド 150 sqlda.sqlvar.sqllen フィールド 151 使用 CHAR_LENGTH LENGTH 90 99 元号ベース日付 99 GLS 考慮事項 98 148, 149, 150 SQLNVCHAR データ型定数 SQLSTATE 状態値 114 SQL 長さ関数 39, 42, 58 UPDATE 文 126 sqlwarn.sqlwarn7 26 sqlca.sqlwarn.sqlwarn7 フラグ 区切り記号付き ルール glfiles ユーティリティ UNLOAD 文 98, 100 [特殊文字] (ブラケット) サブ文字列演算子 76 MATCHES 演算子での範囲 88, 89 * (アスタリスク), MATCHES 演算子のワ イルドカード 89 - (マイナス記号), MATCHES 節内のワイ ルドカード 89 .c ファイル拡張子 129, 138 .cm ファイル拡張子 163, 165 .cmo ファイル拡張子 163 .cv ファイル拡張子 32, 161, 164 .cvo ファイル拡張子 161, 164 .c_ ファイル拡張子 138 .ec ファイル拡張子 129, 138 .iem ファイル拡張子 41 .lc ファイル拡張子 159, 161, 164 .lco ファイル拡張子 159, 164 .o ファイル拡張子 138 ? (疑問符), MATCHES 演算子のワイルド カード 89 % (パーセント) トレース メッセージの パラメータ マーカーの 118, 119 117 フォーマット ディレクティブ 155 48, LIKE 演算子のワイルドカード 89 @ (アットマーク) 書式制御文字 146 _ (アンダスコア), LIKE 演算子のワイル ドカード 89 ^ (キャレット), MATCHES 節内のワイル ドカード 89 索引 183 184 IBM Informix GLS: ユーザーズ ガイド Printed in Japan GB88-8629-00