gpt4 book ai didi

PostgreSQL VCL 控件

转载 作者:行者123 更新时间:2023-11-29 13:05:18 26 4
gpt4 key购买 nike

我为其编写软件的产品之一是会计类应用程序。它用 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.3testdb=# select * from notes where oid=5146352; 文档 |文档 |用户名 |已创建 |跟进 |提醒 |主题 |评论
------+------------+----------+------------------ ----------+------------+--------+------------+---- -------------------------- 3001 | 11579522 |埃里克 | 2013-02-15 22:38:24.136517+00 | f | f |测试笔记 |第一行\r\n第二行\r\n第三行\r\n

版本 8.4.8testdb=# select * from notes where oid=16490575; 文档 |文档 |用户名 |已创建|跟进 |提醒 |主题 |评论------+------------+----------+------------------ ----------+------------+--------+------------+-- ---------- 3001 | 11579522 |埃里克 | 2013-02-18 20:15:23.10943-05 | f | f | <> |第一行\r : 第 2 行\r : 第 3 行\r :

不确定如何为 SO 设置格式,但在 8.4.8 命令行输出中,我在屏幕上打印了 3 行新行,其中 9.2.3 版本连接了输出。

两个数据库的插入是同一个客户端。所以 PostgreSQL 处理换行符的方式发生了一些变化,我想知道是否有一个配置设置可以恢复旧的行为,或者我可以在我的 select 语句中做些什么来恢复旧的行为。

最佳答案

8.4 有 standard_conforming_strings默认设置为 off,9.2 默认为 on

off时,在文字串中,'\n'表示C语言中的换行符,而on时,它表示反斜杠字符后跟字符 n

要回到 8.4 行为,您可以在 session 中发出 SET standard_conforming_strings=off

ALTER DATABASE yourdb SET standard_conforming_strings=off;

让它持续存在并成为与该数据库的新连接的默认值。

从长远来看,建议调整您的代码以处理 standard_conforming_stringson,因为这是前进的方向。

关于PostgreSQL VCL 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14939305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com