Delphi 2009 で作成したアプリケーションから、ADO、ADO 用の ODBC プロバイダー、および ODBC を使用して、IBM DB2 データベースの読み取りと書き込みを行っています。
アプリケーション -> ADO (Win32) -> ODBC-Provider for ADO -> ODBC -> (net) -> DB2 (Windows)
さて、私のアプリケーションは Unicode データを保存する必要があります。そこで、データベースのコードページを UTF-8 に設定しました。Delphi は内部的に UTF-16 の文字列を処理し、それらをマルチバイト文字として COM に渡します。したがって、アプリケーション側でのエンコードは問題ないはずです。
非 ansi-chars を VARCHAR db フィールドに挿入しても問題なく動作し、DB2 管理コンソール (JDBC を使用する Java アプリケーションだと思います) によって正しく表示されます。私のアプリケーション (または ADO クエリを使用する私が作成した他のテスト アプリケーション) では、Unicode 文字を含む VARCHAR フィールドに対して #$1A バイトのシーケンスしか取得しません。
奇妙なことに、バックエンドが Microsoft SQL データベースの場合、同じアプリケーションが正常に動作します。ANSI 準拠の文字列を取得することも、DB2 では問題になりません。
DB2 のドキュメントでは、アプリケーションが接尾辞 W ODBC API を呼び出すと、DB2 ODBC ドライバーは Unicode 文字で応答すると書かれています。特定の状況下で、ADO 用の ODBC プロバイダーがこれらの関数をトリガーせず、代わりに ANSI 関数を使用する可能性はありますか? ADO 接続文字列と ODBC ドライバー設定でクライアント コードページを設定しようとしましたが、うまくいきませんでした。