postgresql中的字符串文字和转义字符

rjo*_*ton 104 string postgresql escaping

尝试将转义字符插入表中会导致警告.

例如:

create table EscapeTest (text varchar(50));

insert into EscapeTest (text) values ('This is the first part \n And this is the second');
Run Code Online (Sandbox Code Playgroud)

产生警告:

WARNING:  nonstandard use of escape in a string literal
Run Code Online (Sandbox Code Playgroud)

(使用PSQL 8.2)

有谁知道怎么解决这个问题?

rjo*_*ton 121

部分.插入文本,但仍会生成警告.

我发现一个讨论表明文本需要以"E"开头,因此:

insert into EscapeTest (text) values (E'This is the first part \n And this is the second');
Run Code Online (Sandbox Code Playgroud)

这会抑制警告,但文本仍未正确返回.当我添加了迈克尔建议的额外斜杠时,它起作用了.

因此:

insert into EscapeTest (text) values (E'This is the first part \\n And this is the second');
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在PostgreSQL 9.0上,E'testing \\ x20double-slash'将评估为'testing \\ x20double-slash',因此只有单斜杠方法适用于E字符串的样式文字 (5认同)
  • 对于PostgreSQL 9.2,请参阅:http://www.postgresql.org/docs/9.2/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-ESCAPE (2认同)

Mic*_*tum 37

凉.

我还找到了关于E的文档:

http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS

PostgreSQL还接受"转义"字符串常量,它是SQL标准的扩展.通过在开始单引号之前写入字母E(大写或小写)来指定转义字符串常量,例如E'foo'.(当在行之间继续转义字符串常量时,仅在第一个开始引号之前写入E.)在转义字符串中,反斜杠字符(\)开始一个类似C的反斜杠转义序列,其中反斜杠和后续字符的组合( s)表示特殊的字节值.\ b是退格键,\ f是换页符,\n是换行符,\ r是回车符,\ t是选项卡.还支持\ digits,其中digits表示八进制字节值,\ xhexdigits,其中hexdigits表示十六进制字节值.(您负责的是,您创建的字节序列是服务器字符集编码中的有效字符.)反斜杠后面的任何其他字符都是字面意思.因此,要包含反斜杠字符,请写入两个反斜杠(\\).此外,除了正常的''方式之外,还可以通过写''将单引号包含在转义字符串中.


epp*_*uig 6

由于您在字符串中使用反斜杠,因此会发出警告.如果要避免该消息,请键入此命令"set standard_conforming_strings = on;".然后在你的字符串之前使用"E",包括你希望postgresql intrepret的反斜杠.