IBM Support

[Db2] 言語対応型の照合をもつ Unicode データベースを作成する方法

How To


Summary

シフト JIS (IBM-943) や、日本語 EUC (IBM-954) のコード・セットを使用するデータベースを Unicode (UTF-8) コード・セットを使用するデータベースに移行するとき、移行元データベースで言語対応型の照合を使用していた場合は Unicode データベースも言語対応型の照合を使用する必要があります。
この文書では言語対応型の照合をもつ Unicode データベースを作成する方法を説明します。

Steps

a)  移行元データベースの照合シーケンスの確認
移行元データベースの照合シーケンスを確認します。ここで UNIQUE が指定されている場合は言語対応型の照合シーケンスが使用されています。
$ db2 get db cfg for <移行元データベース名> | grep "照合"
 データベース照合順序                = UNIQUE
b) 移行先 Unicode データベースの作成
言語対応型の照合シーケンスを持つ Unicode データベースを作成します。
Unicode の言語対応型照合シーケンスは SYSTEM_<コード・ページ> (たとえばシフト JIS の場合は SYSTEM_943) です。言語対応照合を指定するには、コード・セットと照合の組み合わせの結果が「言語対応型」になる組み合わせでなければいけません。
  1. インスタンス・オーナーとして移行先システムにログインします。
  2. クライアント・ロケールを移行元データベースのコード・セットと同じものに設定します。
    ここでは IBM-943 からの移行と仮定してシフト JIS のロケールを設定します。
    $ export LANG=Ja_JP.sjis  (シフト JIS のロケールを設定します。AIX では Ja_JP です)
    もしくは
    $ export DB2CODEPAGE=943 (明示的にシフト JIS の DB2CODEPAGE を指定します)
  3. 環境変数を反映させるため、コマンド行プロセッサーを再起動します。
    $ db2 terminate
  4. 以下のコマンドでデータベースを作成します。
    コード・セットや照合シーケンスを指定しない点に注意してください。
    $ db2 create db <データベース名>
運用上の考慮点
  • 明示的に言語対応型の照合シーケンスを指定すると SQL0204Nエラーが返ります。
    $ db2 create db unidb using codeset UTF-8 territory JP collate using SYSTEM_943
    SQL0204N  "SYSTEM_943" is an undefined name.  SQLSTATE=42704
  • コード・セットを指定して照合シーケンスを SYSTEM に指定した場合およびコード・セットのみ指定した場合、照合シーケンスは IDENTITY に設定されます。
    $ db2 create db unidb using codeset UTF-8 territory JP collate using SYSTEM
    DB20000I  The CREATE DATABASE command completed successfully.
    $ db2 get db cfg for unidb1 | grep collat
     Database collating sequence                 = IDENTITY
  • 照合シーケンスが異なる場合は文字のソート順が異なり、照会結果に影響を与える可能性があります。
    • 照合シーケンスが SYSTEM_943 の場合
      IBM-943 データベースで照合シーケンスを UNIQUE にした場合と同じ動作になります。
      $ db2 "create table t1 (c1 varchar(10))"
      DB20000I  The SQL command completed successfully.
      $ db2 "insert into t1 values ('a'),('A'),('z'),('Z')"
      DB20000I  The SQL command completed successfully.
      $ db2 "select c1 from t1 order by c1"
      
      C1
      ----------
      a
      A
      z
      Z
      
        4 record(s) selected.
      
      $ db2 "select c1 from t1 where c1 between 'a' and 'z'"
      
      C1
      ----------
      a
      A
      z
      
        3 record(s) selected.
    • 照合シーケンスが IDENTITY の場合
      $ db2 "create table t1 (c1 varchar(10))"
      DB20000I  The SQL command completed successfully.
      $ db2 "insert into t1 values ('a'),('A'),('z'),('Z')"
      DB20000I  The SQL command completed successfully.
      $ db2 "select c1 from t1 order by c1"
      
      C1
      ----------
      A
      Z
      a
      z
      
        4 record(s) selected.
      
      $ db2 "select c1 from t1 where c1 between 'a' and 'z'"
      
      C1
      ----------
      a
      z
      
        2 record(s) selected.
    • 言語対応型の照合は以下のページの照合シーケンスが使用されます。
      システムおよび言語対応型の照合表
      たとえば、IBM-943 の言語対応型照合シーケンスは以下の通りです。
      コード・ページ 932 および 943、汎用 (SYSTEM_932 および SYSTEM_943)
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

Document Location

Worldwide

[{"Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PlRAAU","label":"Codepage"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"10.1.0;10.5.0;11.1.0;11.5.0;9.7.0"}]

Document Information

Modified date:
15 August 2023

UID

ibm16410218