(C)日本IBMシステムズ・エンジニアリング(株) データシステム部
Microsoft
Microsoft
Microsoft
Microsoftの
の
のUnicode
の
Unicode
Unicode
Unicode変換
変換
変換
変換と
と
と
と
IBM
IBM
IBM
IBMの
の
のUnicode
の
Unicode
Unicode
Unicode変換
変換の
変換
変換
の
の
のルール
ルール
ルールの
ルール
の
の
の
違
違
違
違いによる
いによる
いによる問題
いによる
問題
問題
問題と
と
と
とDB
DB2
DB
DB
22
2での
での
での
での対応
対応
対応
対応
1問題
問題
問題
問題
DB2 UDBをアクセスするWindows環境でのJavaアプリケーションでは、
以下のような問題が起こる場合がある
文字化け ← 後述の「問題①」 データはあるのに、検索条件に合致しない ← 後述の「問題②」 同じ文字が異なるコード・ポイントでデータベースに保管されることによる問題原因
Javaアプリケーションの場合、アプリケーション実行環境がSJIS環境でも、アプリケーション・ データは内部的にUnicodeに変換される Unicodeへの変換はJVMが行うが、Windows環境においてはこの変換はMicrosoftのSJIS⇔ Unicodeの変換ルールが適用される MicrosoftのSJIS⇔Unicode変換ルールと、IBMのSJIS⇔Unicode変換ルールでは若干異なる 点があるため、文字によって上記のような問題が発生する これら問題はJavaアプリケーションだけでなく、ODBC V3.51のUnicode対応のAPIを使用した アプリケーションでも、同様の現象が発生(C)日本IBMシステムズ・エンジニアリング(株) データシステム部
問題
問題
問題
問題
①
①
①
①:
::
:文字化
文字化けの
文字化
文字化
けの
けの
けのケース
ケース
ケース
ケース
問題となる文字:―、~、∥、-、¦
― (ダッシュ)、~(波ダッシュ)、∥(双柱)、- (マイナス記号)、¦(破断線)これらの文字はUnicodeの中でも、非常によく似た字体のものが存在
以下はそれらを表にしたものhttp://www.unicode.org にて参照可能な"CODE Chart"より転載
B R O K E N B A R ( S y n g le B y te ) U + 0 0 A 6 F U L L W I D T H B R O K E N B A R U + F F E 4 M I N U S S I G N U + 2 2 1 2 F U L L W I D T H H Y P H E N -M I N U S U + F F 0 D D O U B L E V E R T I C A L L I N E U + 2 0 1 6 P A R A L L E L T O U + 2 2 2 5 W A V E D A S H U + 3 0 1 C F U L L W I D T H T I L D E U + F F 5 E E M D A S H U + 2 0 1 4 H O R I Z O N T A L B A R U + 2 0 1 5 B R O K E N B A R ( S y n g le B y te ) U + 0 0 A 6 F U L L W I D T H B R O K E N B A R U + F F E 4 M I N U S S I G N U + 2 2 1 2 F U L L W I D T H H Y P H E N -M I N U S U + F F 0 D D O U B L E V E R T I C A L L I N E U + 2 0 1 6 P A R A L L E L T O U + 2 2 2 5 W A V E D A S H U + 3 0 1 C F U L L W I D T H T I L D E U + F F 5 E E M D A S H U + 2 0 1 4 H O R I Z O N T A L B A R U + 2 0 1 5 3
問題
問題
問題
問題
①
①
①
①:
::
:文字化
文字化けの
文字化
文字化
けの
けの
けのケース
ケース
ケース ...
ケース
...
...
...
IBMとMicrosoftのSJIS⇔Unicode変換ルールの違い
IBM:JIS準拠で決定 Microsoft:独自のルールを採用 IBM IBMIBM IBM変換変換変換変換 MSMSMSMS変換変換変換変換 ダッシュ U+2015 ―――― 0x815C ― ― ― ― 0x815C U+2014 ? 0x3F 波ダッシュ U+FF5E ~~~~ 0x8160 ~ ~ ~ ~ 0x8160 U+301C ? 0x3F 双柱 U+2225 ∥∥∥∥ 0x8061 ∥ ∥ ∥ ∥ 0x8061 U+2016 ? 0x3F マイナス記号 U+FF0D ---- 0x817C - - - - 0x817C U+2212 ? 0x3F 破断線 U+FFE4 ¦¦¦¦ 0xFA55 ¦ ¦ ¦ ¦ 0xFA55 ¦¦¦¦ 0xEEFA ¦ ¦ ¦ ¦ 0xEEFA U+00A6 ¦ 0x7C (半角) それぞれの変換ルールで優先している組み合わせ IBM変換ルールで1方向のみ対応している組み合わせ MS変換ルールで定義されていない組み合わせ IBM変換ルールで全角文字を半角文字に変換 MS変換で1方向のみ対応している組み合わせ Unicode(UCS-2)からIBM-943に変換 する場合、IBM変換では2つの異なる コード・ポイント(例えば全角ダッシュ に対応するU+2014とU+2015)のもの も、1つのIBM-943の全角ダッシュの コード・ポイント0x815Cに変換できる ように対応 しかし、MS変換は1対1対応になって いるため、IBMが優先している U+2014を0x815Cに変換することがで きない このため、Windows環境でJava アプリケーションを使用してDB2 のデータベースにアクセスする 場合、次に紹介するように検索検索検索検索 時 時 時 時にににに問題問題問題が発生問題(C)日本IBMシステムズ・エンジニアリング(株) データシステム部
問題
問題
問題
問題
①
①
①
①:
::
:文字化
文字化けの
文字化
文字化
けの
けの
けのケース
ケース
ケース ...
ケース
...
...
...
全角ダッシュをJavaアプリケーションでIBM-943のデータベースに
INSERT
この場合はIBM変換がU+2015から0x815Cへの変換も対応しているため問題問題問題問題はないはないはないはない Javaアプリケーション IBM-943 ― ― ― ― ダッシュ ダッシュダッシュダッシュ 0 00 0x815Cx815Cx815Cx815C Unicode UnicodeUnicode Unicode U+2015 U+2015 U+2015 U+2015 ― ― ― ― ダッシュダッシュダッシュダッシュ 0 00 0x815Cx815Cx815Cx815C JVMMS変換
IBM変換
JDBC DB2 UDB データベース・サーバー IBM-943 ( (( (MSMSMSMS優先優先優先優先のののコードのコードコード)コード)))Javaアプリアプリアプリをアプリををを使用使用使用使用してして、してして、、‘、‘‘‘――――’’(’’(全角((全角全角ダッシュ全角ダッシュダッシュダッシュ))))ををIBM-943のをを のののデータベースデータベースデータベースデータベースににににINSERT
5
問題
問題
問題
問題
①
①
①
①:
::
:文字化
文字化けの
文字化
文字化
けの
けの
けのケース
ケース
ケース ...
ケース
...
...
...
全角ダッシュをJavaアプリケーションでIBM-943のデータベースから
検索
MS変換ではU+2014から0x815Cへの変換に対応していないため、文字化文字化文字化文字化けがけがけが発生けが発生発生発生 Javaアプリケーション IBM-943 ― ― ― ― ダッシュダッシュダッシュダッシュ 0 00 0x815Cx815Cx815Cx815C Unicode Unicode Unicode Unicode U+2014 U+2014 U+2014 U+2014 SJIS SJIS SJIS SJIS ???? 0x3F 0x3F 0x3F 0x3F JVMMS変換
IBM変換
JDBC DB2 UDB データベース・サーバー IBM-943 Javaアプリをアプリアプリアプリををを使用使用使用使用してして、してして、、IBM-943の、 のののデータベースデータベースデータベースデータベースからから‘からから‘‘‘――――’’’’((((全角全角ダッシュ全角全角ダッシュダッシュダッシュ))))をををを検索検索検索検索 ( (((C)日本IBMシステムズ・エンジニアリング(株) データシステム部
問題
問題
問題
問題
②
②
②
②:
::
:
同じ
同
同
同
じ
じ
じ文字
文字
文字
文字が
が
が
が異
異なる
異
異
なる
なる
なるコード
コード
コード
コード・
・・
・ポイント
ポイントで
ポイント
ポイント
で
で
で保管
保管
保管
保管される
される
される
されるケース
ケース
ケース
ケース
問題となる文字:ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ№℡㈱
IBM-943のコード・ページの中の2つのコード・ポイントをもつ文字に関連する問題これらの文字はSJISからUnicodeに変換される場合は同じ1つのコー
ド・ポイントになるが、UnicodeからSJISに変換される場合は、1つのも
のを2つのものに変換することはできないため、IBM変換とMS変換では
どちらのコード・ポイントを優先するかが異なっている
例 ㈱の場合 ㈱はIBM-943またはMS932のコード・ページでは0x878A(NEC選定文字)と0xFA58(IBM選定文字)の2つがある これらがUnicodeに変換される場合は、IBM変換でもMS変換でも同じU+3231に変換される その逆の場合は2つのコード・ポイントのうちどちらに変換するかが異なり、IBM変換の場合は0xFA58に、またMS変 換の場合は0x878Aに変換される UCS- 2 UCS- 2 UCS- 2UCS- 2 IB M- 9 43IB M- 9 43IB M- 9 43IB M- 9 43 UCS- 2UCS- 2UCS- 2UCS- 2 IBM IBM IBM IBM変換変換 (変換変換 ((( MSMSMSMS9 3 29 3 2 )))) MS9 3 29 3 2 MSMSMS変換変換変換変換 0x878A ㈱ ㈱ ㈱ ㈱ U+3231 ㈱㈱㈱㈱ ㈱㈱㈱㈱ U+3231 0xFA58 それぞれの変換ルールで優先している組み合わせ UCS-2への変換のみ対応している組み合わせ 通常Windows環境で㈱を入力 すると、NEC選定文字の方の 0x878Aのコード・ポイントの㈱ が優先されて使用されるため、 次のような問題が発生 7
問題
問題
問題
問題
②
②
②
②:
::
:
同
同
同
同じ
じ文字
じ
じ
文字
文字が
文字
が
が異
が
異
異なる
異
なるコード
なる
なる
コード
コード・
コード
・・
・ポイント
ポイント
ポイントで
ポイント
で
で
で保管
保管される
保管
保管
される
される
されるケース
ケース
ケース ...
ケース
...
...
...
Windows環境(DB2CODEPAGEは943)のアプリケーションからIBM-943
のデータベースに接続して㈱という文字をINSERTするケース
A. DB2 CLP(コマンド・ライン・プロセッサ)の場合
途中でUnicodeへの変換が発生しない この場合以下のように0x878Aの㈱はそのまま0x878Aでデータベースに保管される CLPなど IBM-943 ㈱ ㈱㈱ ㈱ 0 00 0x878Ax878Ax878Ax878A㈱ ㈱ ㈱ ㈱ 0 00 0x878Ax878Ax878Ax878A
DB2 UDB データベース・サーバー IBM-943 CLPなど、などなどなど、、、JDBC/ODBCをを介をを介介さない介さないさないさないアプリケーションアプリケーションアプリケーションをアプリケーションを使用をを使用使用使用してしてしてして㈱㈱を㈱㈱ををINSERTしたを したした場合した場合場合場合 Windows環境環境で環境環境ででで㈱㈱㈱を㈱を入力をを入力入力入力するとするとするとすると、、、、0x878Aののコードののコードコード・コード・・・ポイントポイントポイントポイントのののの㈱㈱が㈱㈱ががが優先優先優先優先されるされるされるされる この この この この場合場合場合は場合はははコードコードコードコード変換変換が変換変換がが発生が発生発生発生しないのでしないので、しないのでしないので、、、 0x878Aのままのままのままのままデータベースデータベースにデータベースデータベースににに保管保管保管保管されるされるされるされる
(C)日本IBMシステムズ・エンジニアリング(株) データシステム部
問題
問題
問題
問題
②
②
②
②:
::
:
同
同
同
同じ
じ文字
じ
じ
文字
文字が
文字
が
が異
が
異
異なる
異
なるコード
なる
なる
コード
コード・
コード
・・
・ポイント
ポイント
ポイント
ポイントで
で
で
で保管
保管される
保管
保管
される
される
されるケース
ケース
ケース ...
ケース
...
...
...
B. Javaアプリケーションの場合
この場合は途中でUnicodeに変換される UnicodeからIBM-943への変換の時はIBM変換のルールに従い、IBM選定文字の方の0xFA58 のコード・ポイントの㈱になる Javaアプリケーション IBM-943 ㈱ ㈱ ㈱ ㈱ 0 000xFAxFAxFA58xFA585858 Unicode UnicodeUnicode Unicode U+3231 U+3231 U+3231 U+3231 ㈱ ㈱ ㈱ ㈱ 0 00 0x878Ax878Ax878Ax878A
JVM
MS変換
IBM変換
JDBC DB2 UDB データベース・サーバー IBM-943 ( (((IBMIBMIBM優先IBM優先優先優先ののののコードコードコード)コード)))
Javaアプリケーションアプリケーションアプリケーションアプリケーションををを使用を使用使用使用してして㈱してして㈱㈱㈱ををををINSERTしたしたしたした場合場合場合場合
Windows環境環境環境環境でででで㈱㈱㈱㈱をを入力をを入力入力入力するとするとするとすると、、、、0x878Aののコードののコードコード・コード・・・ポイントポイントポイントポイントのののの㈱㈱が㈱㈱ががが優先優先優先優先されるされるされるされる
この このこの
この場合場合場合は場合ははは途中途中途中途中ででUnicodeにでで ににに変換変換変換変換されされされ、され、さらに、、さらにさらにさらにUnicodeからからからからIBM-943へのへのへのへの変換変換が変換変換がが発生が発生発生発生しししし、、、、
0xFA58ののコードののコードコードコード・・・・ポイントポイントポイントポイントのの㈱のの㈱㈱㈱としてとしてとしてとして保管保管保管保管されるされるされるされる 9
現象のまとめ
アプリケーションのコード・ページとデータベースのコード・ページが一致している場合、通常は コード変換が発生しないので、入力された文字はそのままのコードポイントでデータベースに 保管されると思われるが、JDBCを介したことにより異なるコード・ポイントで保管されてしまう という現象が発生する そのため㈱という文字はINSERTしたアプリケーションの違いで、データベース内では、2つの コード・ポイントのものが存在するという現象が発生する このような2つのコード・ポイントのものが混在する状況ではさらに、同じ㈱という文字をもつ データの中に検索条件に合致するものとしないものが発生することになる問題
問題
問題
問題
②
②
②
②:
::
:
同
同
同
同じ
じ文字
じ
じ
文字
文字
文字が
が
が
が異
異
異
異なる
なるコード
なる
なる
コード・
コード
コード
・・
・ポイント
ポイント
ポイント
ポイントで
で
で保管
で
保管される
保管
保管
される
される
されるケース
ケース
ケース
ケース ...
...
...
...
(C)日本IBMシステムズ・エンジニアリング(株) データシステム部
問題
問題
問題
問題
②
②
②
②:
::
:
同
同
同
同じ
じ文字
じ
じ
文字
文字が
文字
が
が異
が
異
異なる
異
なるコード
なる
なる
コード
コード・
コード
・・
・ポイント
ポイント
ポイントで
ポイント
で
で
で保管
保管される
保管
保管
される
される
されるケース
ケース
ケース ...
ケース
...
...
...
㈱が2つのコードポイントで保管されているデータベースに対して
COL1=’㈱’という条件で検索
A. DB2 CLP(コマンド・ライン・プロセッサ)の場合
JDBCを介して保管された㈱の方は、検索結果として返されない CLPなど IBM-943 ㈱ ㈱ ㈱ ㈱ 0 00 0x878Ax878Ax878Ax878A0xFA58 0xFA580xFA58 0xFA58
SELECT * from TAB1 SELECT * from TAB1 SELECT * from TAB1 SELECT * from TAB1
where COL1 = where COL1 =where COL1 = where COL1 =‘ ㈱㈱㈱㈱’ (0x878A) (0x878A) (0x878A) (0x878A) DB2 UDB データベース・サーバー IBM-943 CLPなど、などなどなど、、JDBC/ODBCを、 をを介を介さない介介さないさないアプリケーションさないアプリケーションアプリケーションをアプリケーションををを使用使用使用し使用し、㈱しし、㈱、㈱、㈱ををを検索条件を検索条件検索条件検索条件にに指定にに指定指定指定してしてしてしてSELECTしたしたした場合した場合場合場合 Windows環境環境環境環境でででで㈱㈱㈱㈱をを入力をを入力入力入力するとするとするとすると、、、、0x878Aののコードののコード・コードコード・・・ポイントポイントポイントポイントののの㈱の㈱が㈱㈱ががが優先優先優先優先されるされるされるされる この この この この場合場合は場合場合はははコードコードコード変換コード変換が変換変換がが発生が発生発生しないので発生しないのでしないのでしないので、、検索条件、、検索条件検索条件の検索条件のの㈱の㈱㈱㈱はは 0x878Aとしてはは としてとしてとして比較比較比較比較されるされるされるされる 条件に合致しない COL1 = COL1 = COL1 =
COL1 = 0x878A0x878A0x878A0x878A
11
問題
問題
問題
問題
②
②
②
②:
::
:
同
同
同
同じ
じ文字
じ
じ
文字
文字が
文字
が
が異
が
異
異なる
異
なるコード
なる
なる
コード
コード・
コード
・・
・ポイント
ポイント
ポイントで
ポイント
で
で
で保管
保管される
保管
保管
される
される
されるケース
ケース
ケース ...
ケース
...
...
...
B. Javaアプリケーションの場合
CLPを介して保管された㈱の方は、検索結果として返されない ㈱ ㈱ ㈱ ㈱ 0 00 0x878Ax878Ax878Ax878A0xFA58 0xFA580xFA58 0xFA58 Javaアプリケーション IBM-943 Unicode Unicode Unicode Unicode U+3231 U+3231 U+3231 U+3231 MS変換 IBM変換 DB2 UDB データベース・サーバー IBM-943 Javaアプリケーションアプリケーションアプリケーションをアプリケーションををを使用使用し使用使用ししし、㈱、㈱、㈱、㈱をを検索条件をを検索条件検索条件検索条件にににに指定指定して指定指定してしてSELECTしたして したした場合した場合場合場合 Windows環境環境環境環境でででで㈱㈱㈱㈱をを入力をを入力入力すると入力するとすると、すると、、、0x878Aののコードののコードコード・コード・・・ポイントポイントポイントポイントのののの㈱㈱が㈱㈱ががが優先優先優先優先されるされるされるされる この このこの
この場合場合場合場合はははは途中途中途中で途中でUnicodeにでで にに変換に変換変換され変換されされされ、、さらに、、さらにさらにさらにUnicodeからからからからIBM-943へのへのへの変換への変換が変換変換ががが発生発生発生発生ししし、し、、、 検索条件
検索条件 検索条件
検索条件ののの㈱の㈱㈱は㈱は 0xFA58としてはは としてとして比較として比較比較比較されるされるされるされる
条件に合致しない SELECT * from TAB1
SELECT * from TAB1 SELECT * from TAB1 SELECT * from TAB1
where COL1 = where COL1 = where COL1 = where COL1 =‘ ㈱㈱㈱’㈱ (0x878A) (0x878A) (0x878A) (0x878A) COL1 = COL1 = COL1 =
(C)日本IBMシステムズ・エンジニアリング(株) データシステム部
SJIS⇔Unicode
SJIS⇔Unicode
SJIS⇔Unicode
SJIS⇔Unicode変換
変換
変換
変換での
での
での2
での
2
2
2つの
つの
つの問題
つの
問題
問題に
問題
に対
に
に
対
対する
対
する
する
するDB
DB2
DB
DB
22
2での
での
での
での対応
対応
対応
対応
MicrosoftとIBMのSJIS⇔Unicode変換のルールの違いにより、2つの問
題が潜在
IBMではこれらの問題に対応するため、新しくMS対応の変換表を提供
V7ではFixpak9で、V8ではFixpak2で提供 提供される変換表のファイル名V7: 0941ucs2.cnv 0943ucs2.cnv ucs20941.cnv ucs20943.cnv V8: 0943ucs2.cnv ucs20943.cnv 提供されているファイルの種類が異なるのは、V8では0943ucs2.cnvに0941ucs2.cnvの変換部分も含まれるようになっため、 ucs20943.cnvとucs20941.cnvも同じ
提供方法と使用方法
DB2 UDBが使用するコード変換用の表は、ファイルとしてDB2の導入ディレクトリーの /SQLLIB/CONVディレクトリーに存在 V7のFixpak9、またV8のFixpak2ではその下にMSというサブディレクトリーが作成され、新しい 変換表はこのサブディレクトリーに存在する これを使用する場合は、/SQLLIB/CONVディレクトリー直下の既存の同じ名前の変換表と入 れ替える 念のため既存のファイルはRENAMEするか、別の場所にバックアップ・コピーを作成しておくこと ファイルを置き換えたあと、DB2を再スタート なお、この新しい変換表の使用に関しては、飽くまでも利用者の責任において使用すること 13解説
解説
解説
解説:
::
:
この変換表は、これらの問題に関してその対応への要望が多いため、IBM-943クライアントとIBM-943のデータベースの接続とい う限られた環境での使用に対して、ローカルの対応策としてお客様の責任下でご使用いただくために提供されたもの。 あくまでもIBMでは今までの方針を変えず、Windows環境でどうしてもMSに対応したテーブルを使用しなければならず、また既存 のデータをすべて新しいテーブルを利用して移行し、既存の変換テーブルの影響を受けない環境下を作成できるということが保証 できる場合のみ、この新しい変換表を適応していただくという考え方をとっているということ、またどのような影響、変更があるのか ということを充分理解の上使用すること。 変換表の変更にあたっては、影響範囲を充分調査の上、適用すべきサーバーとクライアントは全て同じ変換表を使用するように 徹底すること なお、JDBCアプリケーションの場合は、IBM製のJDKであればJVMで使用する変換表をMS932ではなくCp943Cに変更することに より、MSのコードではなくIBMのコードに統一することも可能であるの、こちらの方法も要検討。(C)日本IBMシステムズ・エンジニアリング(株) データシステム部
従来
従来
従来
従来(
((
(IBM
IBM
IBM
IBMルール
ルール
ルール)
ルール
)の
))
の
の変換表
の
変換表
変換表と
変換表
と
と
とMS
MS対応
MS
MS
対応
対応
対応の
の
の
の変換表
変換表の
変換表
変換表
の
の
の違
違
違い
違
い
い
い
従来 従来 従来
従来ののののIBMIBMIBMIBMルールルールルールのルールののの変換変換変換変換 IBM-943 IBM-943 IBM-943 IBM-943 U CS-2U CS-2U CS-2U CS-2 0x8754 0xFA4A 0x8755 0xFA48 0x8756 0xFA4C 0x8757 0xFA4D 0x8758 0xFA4E 0x8759 0xFA4F 0x875A 0xFA50 0x875B 0xFA51 0x875C 0xFA52 0x875D 0xFA53 0x8782 0xFA59 0x8784 0xFA5A 0x878A 0xFA58 U+2015 ― U+2014 — U+FF5E ~ U+301C ? U+2225 ∥ U+2016 ∥ U+FF0D - U+2212 ? U+FFE4 ¦ U+00A6 ¦ 0xEEFA U+2160 U+2161 U+2162 U+2163 U+2164 U+2165 U+2166 U+2167 U+2168 U+2169 U+2116 U+2121 U+3231 0x815C 0x8160 0x8161 0x817C 0xFA55 Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ № ℡ ㈱ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ № ℡ ㈱ ― ― ― ― ~ ~ ~ ~ ∥ ∥ ∥ ∥ - - - - ¦ ¦ ¦ ¦ 新 新新
新しいしいしいしいMSMSMSMS対応対応の対応対応のののIBMIBMIBMIBM変換変換変換変換 IBM-943 IBM-943 IBM-943 IBM-943 U CS-2U CS-2U CS-2U CS-2 0x8754 0xFA4A 0x8755 0xFA48 0x8756 0xFA4C 0x8757 0xFA4D 0x8758 0xFA4E 0x8759 0xFA4F 0x875A 0xFA50 0x875B 0xFA51 0x875C 0xFA52 0x875D 0xFA53 0x8782 0xFA59 0x8784 0xFA5A 0x878A 0xFA58 U+2015 ― U+2014 — U+FF5E ~ U+301C ? U+2225 ∥ U+2016 ∥ U+FF0D - U+2212 ? U+FFE4 ¦ U+00A6 ¦ 0xEEFA Ⅰ U+2160 Ⅰ Ⅱ U+2161 Ⅱ Ⅲ U+2162 Ⅲ Ⅳ U+2163 Ⅳ Ⅴ U+2164 Ⅴ Ⅵ U+2165 Ⅵ Ⅶ U+2166 Ⅶ Ⅷ U+2167 Ⅷ Ⅸ U+2168 Ⅸ Ⅹ U+2169 Ⅹ № U+2116 № ℡ U+2121 ℡ ㈱ U+3231 ㈱ ― ― ― ― 0x815C ~ ~ ~ ~ 0x8160 ¦ ¦ ¦ ¦ 0xFA55 ∥ ∥ ∥ ∥ 0x8161 - - - - 0x817C 15
MS
MS
MS
MS対応
対応
対応
対応の
の
の
の新
新
新
新しい
しい変換表
しい
しい
変換表
変換表
変換表を
を
を
を使用
使用
使用
使用すると
すると
すると
すると
問題 ①:文字化けのケース
文字化けの発生が解消 Javaアプリケーション IBM-943 ― ― ― ― ダッシュダッシュダッシュダッシュ 0 00 0x815Cx815Cx815Cx815C Unicode Unicode Unicode Unicode U+2015 U+2015 U+2015 U+2015 SJIS SJIS SJIS SJIS ― ― ― ― 0x815C 0x815C 0x815C 0x815C JVMMS変換
新IBM変換
JDBC DB2 UDB データベース・サーバー IBM-943 Javaアプリアプリアプリアプリをををを使用使用使用使用してして、してして、、、IBM-943ののののデータベースデータベースデータベースデータベースからから‘からから‘‘‘――――’’’’((((全角全角ダッシュ全角全角ダッシュダッシュダッシュ))))をををを検索検索検索検索 ( (( (MSMSMSMS優先優先優先優先のののコードのコードコードコード)))) 正 正 正 正しくしくしく変換しく変換変換変換(C)日本IBMシステムズ・エンジニアリング(株) データシステム部
MS
MS
MS
MS対応
対応
対応
対応の
の
の
の新
新
新
新しい
しい
しい
しい変換表
変換表を
変換表
変換表
を
を
を使用
使用
使用
使用すると
すると
すると
すると ...
...
...
...
問題 ②:
同じ文字が異なるコード・ポイントで保管されるケース
NEC選定文字のコード・ポイントに統一される Javaアプリケーション IBM-943 ㈱ ㈱ ㈱ ㈱ 0 00 0x878Ax878Ax878Ax878A Unicode Unicode Unicode Unicode U+3231 U+3231U+3231 U+3231 ㈱ ㈱ ㈱ ㈱ 0 00 0x878Ax878Ax878Ax878AJVM
MS変換
新IBM変換
JDBC DB2 UDB データベース・サーバー IBM-943 ( (( (MSMSMS優先MS優先優先優先ののののコードコードコード)コード))) Javaアプリケーションアプリケーションアプリケーションアプリケーションををを使用を使用使用使用してして㈱してして㈱㈱を㈱をををINSERTしたしたしたした場合場合場合場合 CLPででINSERTしたでで したしたした 時 時 時 時ととと同と同同じ同じじじコードコードコードコード 17MS
MS
MS
MS対応
対応
対応
対応の
の
の
の新
新しい
新
新
しい
しい
しい変換表
変換表
変換表
変換表を
を使用
を
を
使用
使用
使用する
する
する
する場合
場合
場合の
場合
の
の
の注意事項
注意事項
注意事項
注意事項
問題①のケースは検索時の問題であり、MS対応の変換表を使用すれ
ば現象はすぐに解決
しかし問題②のケースは既にデータベースに保管されているデータと
の整合性を考慮する必要がある
即ちMS対応の変換表を使用すると、㈱は新たに0x878Aで保管されるため既存の0xFA58の データと混在することになる 2つのコードポイントを統一する必要がある(C)日本IBMシステムズ・エンジニアリング(株) データシステム部
2
2
2
2つの
つの
つのコード
つの
コード
コード
コード・
・・
・ポイント
ポイントを
ポイント
ポイント
を
を
を統一
統一
統一
統一する
する方法
する
する
方法
方法
方法((((V
V
V8
V
88
8以降
以降の
以降
以降
の
の
の場合
場合
場合
場合)
))
)
EXPORT/LOADを利用
対象の表のデータをDEL形式で、Unicodeに変換してEXPORT 環境変数のDB2CODEPAGEで1208を指定してEXPORT DB2CODEPAGEを設定する場合、db2setでDB2レジストリー変数として設定すると、そのインスタンスの全てのアプリケーション に影響してしまうので、EXPORTを実行するセッションだけで設定できるよう、AIXであればexport、Windowsであればsetコマンド で環境変数として設定する方がよい NEC選定文字のコード・ポイントに統一する場合 MS対応の変換表が使用できる状態で、LOADのオプションでMODIFIED BY CODEPAGE=1208を指定して LOADしなおす IBM選定文字のコード・ポイントに統一する場合 MS対応の変換表ではなく従来から提供されているIBM変換表を使用し、LOADのオプションでMODIFIED BY CODEPAGE=1208を指定してLOADしなおす注意事項
LOADでなくIMPORTを使用すると、Unicode(UTF-8)の状態で表の列の長さより長いデー タが欠落するので、IMPORTは使用しないでください。 DB2 V7の場合は、LOADでcodepageを指定できないので、この方法は使用できません。 192
2
2
2つの
つの
つのコード
つの
コード
コード
コード・
・・
・ポイント
ポイントを
ポイント
ポイント
を
を
を統一
統一
統一
統一する
する方法
する
する
方法
方法((((V
方法
V
V8
V
88
8以降
以降の
以降
以降
の
の
の場合
場合
場合
場合).
).
).
).....
NEC選定文字のコード・ポイントに統一する場合の手順
㈱ 0x878A ㈱ 0xFA58 ㈱ 0x878A ㈱ 0x878ATBL_A
TBL_A
TBL_A
TBL_A
TBL_A
TBL_A
TBL_A
TBL_A
DB DB DBDB2 2 2 UDB 2 UDB UDB データベースUDB データベースデータベースデータベース サーバーサーバーサーバーサーバー IBM-943 IBM-943 IBM-943 IBM-943 ㈱ U+3231 ㈱ U+3231
新
新
新
新しい
しい
しい
しい変換表使用
変換表使用
変換表使用
変換表使用
>exportまたはset DB2CODEPAGE=1208 >db2 terminate >db2 connect to sample>db2 EXPORT to uni.del of del select * from TBL_A
uni.del uni.del uni.del uni.del
>db2 connect to sample
>db2 LOAD from uni.del of del MODIFIED BY CODEPAGE=1208 replace into TBL_A
DB2CODEPAGEの設定は、新規の接続から有効になるため、 当例では db2 terminateを入れています。
(C)日本IBMシステムズ・エンジニアリング(株) データシステム部