首記ご質問をいただきました。MQはV8(現時点でサポート終了バージョン)です。
MQのサポートするユニコード対応について
IBM i にかぎらず、MQ全般としての情報はこちらにあります。
Unicode 変換サポート MQ V9.4.x
https://www.ibm.com/docs/ja/ibm-mq/9.4.x?topic=conversion-unicode-support
執筆時点で最新のMQ V9.4.xでは以下の記載があります。(一部省略しています)
Unicode エンコードは、UTF-16 (CCSID 1200、13488、および 17584) および UTF-8 (CCSID 1208) の 2 つの形式がサポートされています。 CCSID 1200または1208(最新のUnicodeバージョンなので)を使うべきです。
IBM® MQ は、データ変換において、ユニコード 標準で定義されているすべてのユニコード文字をサポートしています。
8.0 こ のサポー ト は、 UTF-16 サ ロ ゲー ト ペア (U+FFFF 以上の Unicode コ ー ド ポ イ ン ト を表す、 範囲 X' D800 ' から X'DFFF' ま での 2 バ イ ト の UTF-16 キ ャ ラ ク タ の対) を含む UTF-16 の完全サポー ト を含みます。 タ ーゲ ッ ト CCSID に、 UTF-16 サ ロ ゲー ト の対で表 さ れ る コ ー ド ポ イ ン ト のマ ッ ピ ン グが含まれていない場合、 その文字の対は 1 個の置換キ ャ ラ ク タ に変換 さ れます。
後段がMQ V8について説明しているようです。ところが、上記マニュアルのMQ V8.0.0を参照すると、
https://www.ibm.com/docs/ja/ibm-mq/8.0.0?topic=conversion-unicode-support
Unicode エンコードは、UCS-2 (CCSID 1200、13488、および 17584) および UTF-8 (CCSID 1208) の 2 つの形式がサポートされています。
UCS-2 という用語は、UTF-16 と交換可能な語として多用されますが、この使い方は誤りです。 UCS-2 は、各文字が 2 バイトを占める固定幅のエンコード方式です。 UTF-16 は UCS-2 のスーパーセットである可変幅のエンコード方式です。 UTF-16 には、2 バイトの UCS-2 文字に加えて、代理の対という長さ 4 バイトの文字が含まれます。 IBM® MQ はサロゲート・ペアをサポートしません。 したがって、 IBM MQ での UTF-16 および UTF-8 のサポートは、 UCS-2でエンコードできる Unicode 文字に限定されます。
とあり、MQ V8ではUTF-16はサポートされない、と解釈できます。MQ V8はUCS-2, UTF-8がサポートされると解釈していいようです。
ただし以上はあくまでMQの仕様であり、稼働するプラットフォーム(OS)により若干の差異があるようです。
上記リンクにはAIX, Windows, Linux, z/OS などは説明がありますが、IBM i はIBM i の別ページを参照しろ、と記載があります。
IBM iでのMQ ユニコード対応
上記は以下のページに情報があります。
Db2 MQ CCSID 変換
https://www.ibm.com/docs/ja/i/7.6.0?topic=db2-mq-ccsid-conversion
https://www.ibm.com/docs/ja/i/7.4.0?topic=db2-mq-ccsid-conversion
(一部省略・引用。7.5以降は機械変換で言い回しが怪しいのでV7.4から引用)
メッセージが送信されるとき、送信されるメッセージが Db2 によってジョブ CCSID に変換されることがあります。 メッセージが読み取られるか受信されるとき、指定された CCSID に MQ によって変換されることがあります。
つまり、MQはUCS-2, UTF-8をサポートするが、IBM i 上のアプリケーションからMQのデータを取り出す際(MQに送出する際)、そのジョブのCCSID(=通常はEBCDIC、日本語システムでは5026,5035, 1399)に従って文字コード変換が発生する、という事になります。(※執筆時点でIBM i はユニコードのジョブCCSIDをサポートしていません)
IBM i での文字コード変換例 MQSEND関数でIBM i からデータを送出する場合
上記マニュアル中の記載を転載しますと、
MQSEND 関数の msg-data パラメーターは、ジョブ CCSID を使用すると定義されています。 ストリングが msg-data に渡される場合、ジョブ CCSID に変換されます。 例えば、CCSID が 1200 のストリングが msg-data に渡される場合、 ジョブ CCSID(日本語では5026,5035,1399のいずれか) に変換された後にメッセージ・データが Websphere MQ に渡されます。
ストリングがビット・データとして定義されているか、またはストリングの CCSID がジョブ CCSID である場合、変換は行われません。
上記のご質問に戻るとMQを通じて送受信されるデータはユニコード(UCS-2かUTF8)なのですが、IBM i 上のジョブのメモリ空間に展開される際にいったん、CCSID 5026か5035か1399のEBCDICコードで変換されたデータがMQに渡されることになります。
さらに後続の処理についての記述を見ますと、
MQ は、MQSEND が実行されるときにはメッセージ・データの CCSID 変換を行いません。 Db2 から渡されるメッセージ・データは、変更されずに CCSID を付けて送信されます。 この CCSID を使って、メッセージの受信側にメッセージ・データの解釈方法を知らせます。送信される CCSID は、MQSEND 関数で使用されるサービスの CODEDCHARSETID に指定される値に依存します。 CODEDCHARSETID のデフォルトは -3 です。この場合、渡される CCSID がデフォルトのジョブ CCSID であることを示します。 -3 以外の値が CODEDCHARSETID に使用されている場合、呼び出し側は、 MQSEND に渡されるメッセージ・データが Db2 によってジョブ CCSID に変換されないこと、 およびその指定された CCSID でストリングがエンコードされることを確認する必要があります。
とありますので、ユニコード(USC-2,UTF-8)のデータをIBM i MQで相手先にデータ送信される際のメッセージデータは日本語の場合はCCSID 5026, 5035, 1399に変換されたデータに元のデータのCCSID(UCS-2またはUTF-8)が指定されて送信されるようです。
IBM i での文字コード変換例 IBM i MQからデータを受信する場合
メッセージが MQ スカラー関数または表関数で読み取られる場合、msg-data 戻りパラメーター (およびDb2 MQ 表関数の MSG 結果列) もデフォルトのジョブ CCSID を使用するように定義されます。 Db2 は変換を行わず、必要な変換の実行はすべて MQ に依存します。 MQがメッセージ・データを変換するかどうかは、指定したポリシーで RCV_CONVERT 値を「N」に設定することで制御できます。
指定のサービスで CODEDCHARSETID の値が -3 の場合、Db2 は、 読み取るメッセージを MQ がジョブ CCSID に変換するように指示します。 -3 以外の値が CODEDCHARSETID に使用されている場合、Db2 は、 読み取るメッセージを MQ がその CCSID に変換するように指示します。 msg-data 戻りパラメーターおよび MSG 結果列ではデフォルトのジョブ CCSID を使用するように Db2 で定義されているため、 メッセージの読み取りまたは受信に使用されるサービスでは、CODEDCHARSETID に -3 以外の値を指定することは勧められていません。
つまり、推奨されるCODEDCHARSETID = -3の場合、MQで受信したユニコードデータはいったん、日本語のCCISDに置き換えられてジョブ内に受信される、という事になります。