変更内容
Symfoware Server 9.1.x以前の補助文字のコード変換は、Unicode 2.0(UCS2/UTF8)でコード変換を行います。
Symfoware Server V10.0.0以降の補助文字のコード変換は、JIS2004のUNICODEの4バイト文字(補助文字)に対応するため、Unicode 4.1(UTF16/UTF8)でコード変換を行います。
Symfoware Serverのバージョンレベル | 文字コード | 各国語文字コード |
---|---|---|
9.1.x以前 | UTF8(UNICODE 2.0) | UCS2 |
V10.0.0以降 | UTF8(UNICODE 4.1) | UTF16 |
ただし、以下の製品をインストールしている場合、Unicode 2.0でコード変換を行います。
Windows版
SystemWalker/CharsetMGR-M V5.1L10以降
Interstage Charset Manager V8.2以前
Linux版
Interstage Charset Manager V8.2以前
Solaris 32ビット版
Interstage Charset Manager V8
Unicode 2.0とUnicode 4.1の補助文字のコード変換はサロゲートペア領域の扱いが異なります。
Unicode 4.1はUNICODEの補助文字を、UTF-8に変換すると、4バイト文字に変換します。
Unicode 2.0はUTF8として3バイトまでしか扱えません。そのため、UNICODEの補助文字をUTF-8に変換すると、3バイト文字のペア(3バイト×2)に変換されます。
非互換
UTF8/UCS2とUTF8/UTF16の間で、補助文字のサロゲートペア領域に対する扱いが異なります。
入力データ | 変換元 | 変換先 | 結果 |
---|---|---|---|
サロゲート領域の上位(D800~DBFF)、下位(DC00~DFFF) がペアになっている場合 | UCS2 | UTF8(UNICODE 2.0) UCS2 | 対応するコード(2文字) |
UTF16 | UTF8(UNICODE 4.1) UTF16 | 対応するコード(1文字) | |
サロゲート領域の上位(D800~DBFF)の直後に、下位(DC00~DFFF)以外が現れた場合 | UCS2 | UTF8(UNICODE 2.0) UCS2 | それぞれ独立した文字として変換 |
UTF16 | UTF8(UNICODE 4.1) UTF16 | 変換エラー | |
サロゲート領域の上位(D800~DBFF)以外の直後に、下位(DC00~DFFF)が現れた場合 | UCS2 | UTF8(UNICODE 2.0) UCS2 | それぞれ独立した文字として変換 |
UTF16 | UTF8(UNICODE 4.1) UTF16 | 変換エラー | |
入力データがサロゲート領域の上位(D800~DBFF)で終了した場合 | UCS2 | UTF8(UNICODE 2.0) UCS2 | 対応するコード |
UTF16 | UTF8(UNICODE 4.1) UTF16 | 変換エラー | |
EDA080~EDBFBF (UCS2のD800~DFFFに相当) | UTF8(UNICODE 2.0) | UCS2 | 対応するコード |
UTF8(UNICODE 4.1) | UTF16 | 変換エラー | |
F0808080~F4BFBFBF (1~16面のコード) | UTF8(UNICODE 2.0) | UCS2 | 変換エラー |
UTF8(UNICODE 4.1) | UTF16 | 対応するコード |
このため、Symfoware Server 9.1.x以前の環境からSymfoware Server V10.0.0以降の環境に、データベースに格納しているデータ、および、アプリケーションを移植するときに、コード変換エラーが発生するという非互換があります。
TCP/IP接続のアプリケーションにおいて、Unicode 2.0でコード変換を行うSymfoware Server 9.1.x以前のバージョンレベル、または、Interstage Charset Managerをインストールしている環境と混在する場合、クライアント用の動作環境ファイルのCHARACTER_TRANSLATEの指定により非互換が発生します。
クライアント | サーバ | CHARACTER_TRANSLATE | 非互換の有無 |
---|---|---|---|
Symfowar Server Client 9.1.x以前、 | Symfoware Server V10.0.0以降 | SERVER | 非互換が発生します。 |
CLIENT | 非互換は発生しません。 | ||
Symfoware Server Client 9.1.1以降 | Symfoware Server 9.1.x以前、 | SERVER | 非互換は発生しません。 |
CLIENT | 非互換が発生します。 |
以下の場合に、アプリケーションに返却される補助文字の値が、Symfoware Server 9.1.x以前の環境とSymfoware Server V10.0.0以降の環境で異なるという非互換があります。
データベースの文字コード系がUNICODEである。かつ、
各国語文字列の列を含む表を定義する。かつ、
2.の各国語文字列に補助文字を含むレコードが存在する。かつ、
2.の表に対して、以下のいずれかのアプリケーションまたはコマンドでSQL文を実行する。かつ、
埋込みSQLを使用したアプリケーション
JDBCドライバを使用したアプリケーション
ODBCドライバを使用したアプリケーション
rdbexecsqlコマンド
rdbunlsqlコマンド
各国語文字列型ホスト変数のコード系がUTF8である。
以下の場合に、rdbunlコマンドの出力ファイルに含まれる補助文字の値が、Symfoware Server 9.1.x以前の環境とSymfoware Server V10.0.0以降の環境で異なるという非互換があります。
データベースの文字コード系がUNICODEである。かつ、
各国語文字列の列を含む表を定義する。かつ、
2.の表の各国語文字列の格納データに、補助文字が含まれる。かつ、
3.の表のDSIに対して、rdbunlコマンドを実行する。
以下の場合に、Symfoware Server 9.1.x以前の環境では正常終了していたアプリケーションが、Symfoware Server V10.0.0以降の環境で以下のいずれかのエラーが発生するという非互換があります。
JYP2201E 入力ホスト変数にコード変換できない文字が含まれています.
JYP2206E SQL文にコード変換できない文字が含まれています.
JYP2063E コード変換に失敗しました.
JYP2202I 出力ホスト変数へのコード変換で置換した文字があります.
データベースの文字コード系がUNICODEである。かつ、
各国語文字列の列を含む表を定義する。かつ、
2.の表に対して、以下のいずれかのアプリケーションまたはコマンドでSQL文を実行する。かつ、
埋込みSQLを使用したアプリケーション
JDBCドライバを使用したアプリケーション
ODBCドライバを使用したアプリケーション
Symfoware .NET Data Providerを使用したアプリケーション
rdbexecsqlコマンド
rdbuptコマンド
rdbunlsqlコマンド
3.のSQL文の以下のいずれかに補助文字が含まれる。
文字列定数
ホスト変数
動的パラメタ
データベースの格納データ
プロシジャのSQL変数
プロシジャのパラメタ
4.のデータ型が各国語文字列型である。かつ、
4.の各国語文字コード系がUTF8である。
以下の場合に、Symfoware Server 9.1.x以前の環境では正常終了していたRDBコマンドが、Symfoware Server V10.0.0以降の環境で以下のエラーが発生するという非互換があります。
qdg02483u d*件目: 異常データが存在します 列名=s* t*
データベースの文字コード系がUNICODEである。かつ、
各国語文字列の列を含む表を定義する。かつ、
2.の表の各国語文字列の格納データに、補助文字が含まれる。かつ、
Symfoware Server 9.1.x以前の環境で、3.の表のDSIに対して、rdbunlコマンドを実行する。かつ、
Symfoware Server V10.0.0以降の環境で、入力ファイルに4.で出力されたファイルを指定して、以下のいずれかのコマンドを実行する。
rdbsaloaderコマンド
rdbsloaderコマンド
rdbsuloaderコマンド
以下の場合に、Symfoware Server 9.1.x以前の環境では正常終了していたlxrepcreコマンドが、Symfoware Server V10.0.0以降の環境で以下のエラーが発生するという非互換があります。
RP02060 USINGにおいて定数の囲み文字に誤りがあります 列名='s*'
データベースの文字コード系がUNICODEである。かつ、
Linkexpress Replication option を使用したレプリケーション運用において、lxrepcreコマンドの入力ファイルにWHEREを指定している。かつ、
2.のWHEREに指定する列のデータ型が各国語文字列型である。かつ、
3.を比較する定数文字列に補助文字が含まれる。
以下の場合に、rdbcycexpコマンドの出力する内容において、補助文字の出力データがSymfoware Server 9.1.x以前の環境とSymfoware Server V10.0.0以降の環境で異なる場合があります。
データベースの文字コード系がUNICODEである。かつ、
Interstage Business Application Serverの高信頼性ログ機能によるユーザログテーブルの運用において、ユーザログレコードの出力フォーマットに各国語文字列型が含まれる。
rdbcycexpコマンドのiオプションに2.のユーザログテーブルのDSIを指定する。かつ、
3.のDSIの2.のデータに補助文字が含まれる。
対処方法
Symfoware Server V10.0.0以降の環境に移行後に、補助文字をUnicode 4.1で扱う運用したい場合、Symfoware Server 9.1.x以前の環境で扱うデータやアプリケーションを、Charset Managerを使用して以下の手順でUnicode 4.1のUTF8に変換してください。
以下を実行
cat original.txt | iconv -a -f UTF8 -t UCS2 > ucs2.txt
備考. original.txtは、Symfoware Server 9.1.x以前の環境のアンロードしたデータやアプリケーションになります。
以下のいずれかを実行
1.の実行結果ucs2.txtがリトルエンディアンの場合
cat ucs2.txt | iconv -a -f UTF16LE -t UTF8_4 > utf8_4.txt
1.の実行結果ucs2.txtがビッグエンディアンの場合
cat ucs2.txt | iconv -a -f UTF16BE -t UTF8_4 > utf8_4.txt
変換した後のデータについては、問題ないことを確認してください。
参照
iconvコマンドおよびエンディアンについては、“Interstage Charset Manager使用手引書 標準コード変換機能編”の“iconvコマンド(UNIX系)”および“変換時の動作について”を参照してください。
TCP/IP接続のアプリケーションにおいて、Unicode 2.0でコード変換を行うSymfoware Server 9.1.x以前のバージョンレベル、または、Interstage Charset Managerをインストールしている環境と混在する場合、クライアント用の動作環境ファイルのCHARACTER_TRANSLATEにUnicode 2.0でコード変換を行うクライアントおよびサーバを指定してください。
クライアント | サーバ | CHARACTER_TRANSLATE |
---|---|---|
Symfoware Server Client 9.1.x以前、 | Symfoware Server V10.0.0以降 | CLIENT |
Symfoware Server Client 9.1.1以降 | Symfoware Server 9.1.x以前、 | SERVER |
Symfoware Server V10.0.0以降の環境に移行後に、Symfoware Server 9.1.x以前の環境と同様に補助文字をUnicode 2.0で扱いたい場合、RDB構成パラメタファイルに“RDBUNICODEV2=YES”を指定してください。
RDB構成パラメタファイルの“RDBUNICODEV2=YES”の指定は、PH05736の修正により有効になります。
PH05736はサーバとクライアントに対して修正しています。
以下に該当する場合、PH05736の修正が有効にならず、本非互換は解消されません。
クライアントにPH05736が未適用、かつ、クライアント用の動作環境ファイルの“CHARACTER_TRANSLATE=CLIENT”を指定
Symfoware Serverが9.1.x以前の環境、かつ、クライアント用の動作環境ファイルの“CHARACTER_TRANSLATE=CLIENT”を指定
上記に該当する場合、クライアント用の動作環境ファイルの“CHARACTER_TRANSLATE=SERVER”を指定するか、CHARACTER_TRANSLATEの指定を削除してください。
RDB構成パラメタファイルに“RDBUNICODEV2 = YES”を指定した場合、以下のいずれかに該当する場合、UTF32を使用するアプリケーションおよびrdbコマンドは使用できません。使用した場合JYP1080Eまたは、qdg13110uを出力してエラー終了します。
RCSオプションにUTF32_BEまたはUTF32_LEを指定してsqlpcobまたは、sqlcobolコマンドでコンパイルしたCOBOLアプリケーションを実行した場合
UオプションにUTF32またはUTF32Bを指定して以下のいずれかのコマンドを実行した場合
rdbsloader
rdbsaloader
rdbsuloader
rdbunl
rdbupt
JDBCドライバが動作するJDKについて、Java SE 5.0でUnicode 4.0のコード変換や補助文字のコードポイントを扱うメソッドが追加されています。
Javaアプリケーションにおいて、補助文字を扱う場合、本パラメタを指定しないでください。