私がソフトウェアを作成する製品の 1 つは、会計タイプのアプリケーションです。C++ で記述され、C++ Builder と VCL コントロールを使用し、Linux で実行されている PostgreSQL データベースに接続します。
PostgreSQL データベースは現在、バージョン 8.4.x です。UTF8エンコーディングを使用しています。すべてがかなりうまく機能します。
まったく同じエンコーディングを使用して PostgreSQL v9.2.3 に対してソフトウェアのテストを実行しており、すべてのテキスト編集入力が複数の行を \r\n 文字に置き換えているという問題を発見しています。
たとえば、3行のテキストを入力し、各行の後にEnterキーを押してから保存して読み返すと、行末文字が削除された1行が得られます。データベースからデータを取得すると、最終的に次のような 1 行になります。
私たちのアプリケーションは Unicode に対応していません。Borland の AnsiString。(このアプリを C++ Builder XE に移行中)。誰かがこれを引き起こしている可能性があることを知っていますか、または大規模な変換が進行している間に現在のコードベースでこれを修正しようとするものを提供していますか?
Borland DBText および DBRichText コントロールを試しましたが、どちらも同じことを行います。
言及すべきもう 1 つのポイントは、サーバー上の新しい PostgreSQL に対してのみテストし、8.x PostgreSQL クライアント ライブラリ (psql.lib) をまだ使用していることです。したがって、クライアントとサーバーのバージョンはまったく同じレベルではありませんが、これが問題であるとは思いませんが、洞察は大歓迎です.
アップデート:
以下は、2 つのバージョンの PostgreSQL からのコマンド ラインの結果です。
バージョン 9.2.3 testdb=# select * from notes where oid=5146352; ドシッド | ドクノ | ユーザー名 | 作成 | フォローアップ | リマインダー | 件名 | コメント
-------+----------+----------+------------------- ------------+---------+----------+-----------+--- -------------------------- 3001 | 11579522 | エリック | 2013-02-15 22:38:24.136517+00 | ふ | ふ | テストノート | ライン1\r\nライン2\r\nライン3\r\n
バージョン 8.4.8 testdb=# select * from notes where oid=16490575; ドシッド | ドクノ | ユーザー名 | 作成 | フォローアップ | リマインダー | 件名 | コメント -------+----------+----------+------------------- -----------+----------+----------+--------------+- --------- 3001 | 11579522 | エリック | 2013-02-18 20:15:23.10943-05 | ふ | ふ | <> | ライン 1\r : ライン 2\r : ライン 3\r :
これを SO 用にフォーマットする方法がわかりませんが、8.4.8 コマンド ライン出力では、9.2.3 バージョンでは出力が連結されるため、画面に 3 つの新しい行が出力されます。
両方のデータベースの挿入は同じクライアントです。そのため、PostgreSQL が改行文字を処理する方法が変更されました。古い動作を元に戻す構成設定があるかどうか、または古い動作を元に戻すために select ステートメント内で実行できる何かがあるかどうか疑問に思っています。