1

有谁知道如何将单个反斜杠存储到 PostgreSQL 数据库中?

我正在使用 C# 和 Nqgsql 访问 PostgreSQL,我的情况是我想将“1\\0\\0\\0\\1\\0”存储到数据库中,并且 DB 字段中的预期字符串将为“ 1\0\0\0\1\0",即我在db字段中只需要一个反斜杠,因此当我从d​​b获取数据时,它仍然是"1\\0\\0\\0\ \1\\0" 在内存中。但我的问题是当内存字符串为“1\\0\\0\\0\\1\\0”时,存储到db字段中的字符串也是“1\\0\\0\\0\\1 \\0”,那么当我从 db 获取数据时,内存字符串将为“1\\\\0\\\\0\\\\0\\\\1\\\\0”。

我在c#代码中使用的变量设置为如下格式: var a = "1\\0\\0\\0\\1\\0"; var b = @"1\0\0\0\1\0";

当存储到 db 中时,两个变量中的反斜杠似乎都加倍了。如何处理这个问题?

4

2 回答 2

1

您应该通过使用参数化查询来完全避免这种情况。请参阅 Npgsql 中的示例:用户手册在查询部分中使用参数。

但是如果你真的想构造一个文字查询,那么你可以使用E''语法,像这样:

var sql = @"insert into table_name (column_name) values (E'1\\0\\0\\0\\1\\0')";

此语法独立于服务器或连接配置,例如standard_conforming_strings. 但它是 Postgres 特有的。

如果您希望您的代码在不同的数据库引擎之间可移植,您可以set standard_conforming_strings=on在连接后立即发出。然后这个工作:

var sql = @"insert into table_name (column_name) values ('1\0\0\0\1\0')";

此选项自 PostgreSQL 9.1 起默认开启,自 8.2 起可用。

于 2013-01-28T23:55:29.677 回答
1

我也有这个问题。我能够通过进入数据库的配置并将“standard_conforming_strings”更改为OFF来解决它。

于 2013-11-19T18:15:53.830 回答