首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL VCL控件

PostgreSQL VCL控件
EN

Stack Overflow用户
提问于 2013-02-18 23:05:25
回答 2查看 241关注 0票数 1

我为之编写软件的产品之一就是记账类应用程序。它是用C++编写的,使用C++ Builder和VCL控件,连接到运行在Linux上的PostgreSQL数据库。

PostgreSQL数据库当前的版本为8.4.x。我们使用UTF8编码。每件事都运行得很好。

我们正在使用完全相同的编码在PostgreSQL v9.2.3上运行我们的软件测试,并发现了一个问题,在这个问题中,我们所有的文本编辑输入都用\r\n字符替换了多行。

例如,你输入3行文本,在每行后按enter键,然后保存并重新阅读,我得到一行,但行尾字符被删除。当我们从数据库获取数据时,我们以一行结束: line1\r\nline2\r\nline3\r\n,其中显示"\r\n“,而不是在流中获取0x0A,0x0D。

我们的应用程序不支持Unicode。波兰德的AnsiString(在迁移此应用程序的过程中。到C++生成器XE)。有没有人知道这可能是什么原因,或者提供一些东西来尝试在当前代码库中修复这个问题,而更大的转换正在进行中?

我尝试过Borland的DBText和DBRichText控件,它们做的都是一样的事情。

我应该提到的另一点是,我们只在服务器上针对新的PostgreSQL进行了测试,并且仍然使用8.x PostgreSQL客户端库(psql.lib)。因此,客户端和服务器版本并不完全在同一级别,但我并不怀疑这是一个问题,但任何见解都是受欢迎的。

更新:

以下是两个版本的PostgreSQL的一些命令行结果。

版本9.2.3 testdb=# select * from notes where oid=5146352;docid | docno | username | created | followup | reminder | subject | comments

-------+----------+----------+-------------------------------+----------+----------+-----------+- 3001 | 11579522 | eric | 2013-02-15 22:38:24.136517+00 |f|f|测试说明|line1 1\r\nline3 2\r\nline3 3\r\n

版本8.4.8 testdb=# select * from notes where oid=16490575;文档|文档编号|用户名|已创建|关注|提醒|主题|评论-------+----------+----------+------------------------------+----------+----------+-+- 3001 | 11579522 | eric | 2013-02-18 20:15:23.10943-05 |f| <> |line2 1\r:line2 2\r:line3 3\r:

不知道如何格式化它,但是在8.4.8命令行输出中,我在屏幕上打印了3行新行,其中9.2.3版本连接了输出。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-19 09:54:48

8.4默认将standard_conforming_strings设置为off,9.2默认将其设置为on

当它是off时,在文字字符串中,'\n'表示换行符,就像在C语言中一样,而当它是on时,表示反斜杠字符后跟字符n

要返回到8.4行为,您可以在会话中发出SET standard_conforming_strings=off,或者

代码语言:javascript
复制
ALTER DATABASE yourdb SET standard_conforming_strings=off;

以使其持久存在并成为到此数据库的新连接的默认设置。

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

票数 1
EN

Stack Overflow用户

发布于 2013-02-19 10:28:53

您的问题看起来与postgres配置变量standard_conforming_strings有关。在Postgres 9.1之前,这在默认情况下是关闭的。这就是为什么postgres不从字面上处理反斜杠而是解释它们的原因。但是根据SQL标准,反斜杠应该按字面意思处理。因此,从Postgres9.1开始,这个配置变量已经打开,您可以看到\r\n是文字而不是解释。

虽然这不是正确的方法,但要使其在您的情况下工作,您需要编辑服务器的配置文件(postgresql.conf)并关闭此设置(standard_conforming_strings=on)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14939305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档