我编写软件的产品之一是会计类型的应用程序。它是用 C++ 编写的,使用 C++ Builder 和 VCL 控件,连接到在 Linux 上运行的 PostgreSQL 数据库。
PostgreSQL 数据库当前版本为 8.4.x。我们使用 UTF8 编码。一切都很好。
我们正在使用完全相同的编码针对 PostgreSQL v9.2.3 运行我们的软件测试,并且发现了一个问题,即我们所有的文本编辑输入都用 \r\n 字符替换了多行。
因此,例如,您输入 3 行文本并在每行后按回车键,然后保存并读回,我得到一行,其中行尾字符被删除。当我们从数据库中获取数据时,我们会得到如下一行: line1\r\nline2\r\nline3\r\n 其中显示“\r\n”,而不是在流中获取 0x0A、0x0D。
我们的应用程序不支持 Unicode。Borland 的 AnsiString。(在将此应用程序迁移到 C++ Builder XE 的过程中)。有谁知道可能是什么原因造成的,或者提供一些东西来尝试在当前代码库中解决这个问题,同时进行更大的转换?
我已经尝试过 Borland DBText 和 DBrichText 控件,它们都做同样的事情。
我应该提到的另一点是我们只在服务器上针对新的 PostgreSQL 进行了测试,并且仍在使用 8.x PostgreSQL 客户端库 (psql.lib)。所以客户端和服务器版本并不完全在同一级别,但我不怀疑这是一个问题,但任何见解当然欢迎。
更新:
以下是 PostgreSQL 两个版本的一些命令行结果。
版本 9.2.3 testdb=# select * from notes where oid=5146352; 顺从 | 文档 | 用户名 | 创建 | 跟进 | 提醒 | 主题 | 评论
-------+----------+----------+------- ------------+---------+----------+-----------+--- -------------------------- 3001 | 11579522 | 埃里克 | 2013-02-15 22:38:24.136517+00 | f | f | 测试笔记 | 第 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 | f | f | <> | line1\r : line2\r : line3\r :
不知道如何为 SO 格式化,但在 8.4.8 命令行输出中,我在屏幕上打印了 3 行新行,因为 9.2.3 版本连接了输出。
两个数据库的插入是同一个客户端。所以 PostgreSQL 处理换行符的方式发生了一些变化,我想知道是否有一个配置设置来恢复旧的行为,或者我可以在我的 select 语句中做些什么来恢复旧的行为。