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)
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表示十六进制字节值.(您负责的是,您创建的字节序列是服务器字符集编码中的有效字符.)反斜杠后面的任何其他字符都是字面意思.因此,要包含反斜杠字符,请写入两个反斜杠(\\).此外,除了正常的''方式之外,还可以通过写''将单引号包含在转义字符串中.
由于您在字符串中使用反斜杠,因此会发出警告.如果要避免该消息,请键入此命令"set standard_conforming_strings = on;".然后在你的字符串之前使用"E",包括你希望postgresql intrepret的反斜杠.