尝试在表中插入转义符将导致警告。
举例来说:
create table EscapeTest (text varchar(50));
insert into EscapeTest (text) values ('This is the first part \n And this is the second');
字符串
生成警告:
WARNING: nonstandard use of escape in a string literal
型
(* 使用PSQL 8.2*)
有谁知道怎么绕过这个?
5条答案
按热度按时间jyztefdp1#
部分。插入文本,但仍生成警告。
我发现一个讨论表明文本需要在“E”之前,例如:
字符串
这抑制了警告,但文本仍然没有被正确返回。当我按照Michael的建议添加额外的斜杠时,它起作用了。
因此:
型
9ceoxa922#
酷了
我还找到了有关E:
http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS
引用格式由“Randall”提供
PostgreSQL还接受“转义”字符串常量,这是SQL标准的扩展。(大写或小写),例如
E'foo'
。(当跨行继续转义字符串常量时,请仅在第一个左引号前写入E.)在转义字符串中,反斜杠字符(\
)开始一个类似C的反斜杠转义序列,其中反斜杠和后面的字符的组合表示一个特殊的字节值:\b
是退格,\f
是换页机,\n
是换行符,\r
是回车,\t
是一个选项卡。还支持
\
,其中表示八进制字节值,以及 `\x `<hexdigits>
,其中<hexdigits>表示十六进制字节值。(It您有责任确保所创建的字节序列是服务器字符集编码中的有效字符。)
反斜扛后面的任何其他字符都是字面上的。因此,若要包含反斜扛字符,请写入两个反斜扛(\)。此外,除了''的一般方式之外,也可以写入',以将单引号包含在逸出字串中。
dohp0rv53#
由于您在字符串中使用了反斜杠,因此会发出警告。如果您想避免此消息,请键入此命令“set standard_conforming_strings=on;"。然后在您的字符串之前使用“E”,包括您希望postgresql解释的反斜杠。
mec1mxoz4#
我发现Postgres不太可能在输入时截断你的数据--它要么拒绝它,要么按原样存储它。
字符串
ogq8wdun5#
非常愚蠢的问题:你确定字符串被截断了,而不是在你指定的换行符处被截断了(而且可能没有显示在你的界面中)?
这将被插入\n这将不会
或
这将被插入
这不会是
还有,你使用的是什么接口?有没有可能是沿着的东西在吞噬你的反斜杠?