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) です。言語対応照合を指定するには、コード・セットと照合の組み合わせの結果が「言語対応型」になる組み合わせでなければいけません。
例
- インスタンス・オーナーとして移行先システムにログインします。
- クライアント・ロケールを移行元データベースのコード・セットと同じものに設定します。
ここでは IBM-943 からの移行と仮定してシフト JIS のロケールを設定します。$ export LANG=Ja_JP.sjis (シフト JIS のロケールを設定します。AIX では Ja_JP です)
$ export DB2CODEPAGE=943 (明示的にシフト JIS の DB2CODEPAGE を指定します)
- 環境変数を反映させるため、コマンド行プロセッサーを再起動します。
$ db2 terminate
- 以下のコマンドでデータベースを作成します。
コード・セットや照合シーケンスを指定しない点に注意してください。$ 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)
- 照合シーケンスが SYSTEM_943 の場合
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"}]
Was this topic helpful?
Document Information
Modified date:
15 August 2023
UID
ibm16410218