PostgreSQL:如何只在PostgreSQL数据库中插入一个反斜杠

时间:2013-01-28 08:38:31

标签: c# postgresql npgsql

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

我正在使用C#和Nqgsql来访问PostgreSQL,我的情况是我要将“1 \\ 0 \\ 0 \\ 0 \\ 1 \\ 0”存储到数据库中,并将数据库字段中的预期字符串存储将是“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中时,似乎两个变量中的反斜杠都加倍了。如何处理这个问题?

2 个答案:

答案 0 :(得分:1)

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

但是如果你真的想构建一个文字查询,那么你可以使用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以来可用。

答案 1 :(得分:1)

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