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

例如:

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

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

===============>>#1 票数:116 已采纳

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

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

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

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

因此:

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

===============>>#2 票数:36

凉。

我还找到了关于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表示十六进制字节值。 (您负责的是,您创建的字节序列是服务器字符集编码中的有效字符。)反斜杠后面的任何其他字符都是字面意思。 因此,要包含反斜杠字符,请写入两个反斜杠(\\\\)。 此外,除了正常的''方式之外,还可以通过写''将单引号包含在转义字符串中。

===============>>#3 票数:6

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

===============>>#4 票数:3

我发现Postgres极不可能在输入上截断您的数据 - 它要么拒绝它,要么按原样存储它。

milen@dev:~$ psql
Welcome to psql 8.2.7, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

milen=> create table EscapeTest (text varchar(50));
CREATE TABLE
milen=> insert into EscapeTest (text) values ('This will be inserted \n This will not be');
WARNING:  nonstandard use of escape in a string literal
LINE 1: insert into EscapeTest (text) values ('This will be inserted...
                                              ^
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.
INSERT 0 1
milen=> select * from EscapeTest;
          text
------------------------
 This will be inserted
  This will not be
(1 row)

milen=>

===============>>#5 票数:2

真的很愚蠢的问题:你确定字符串被截断了,而不是只是在你指定的换行符处断开(并且可能没有在你的界面中显示)? 即,你是否希望该领域显示为

这将被插入\\ n这不会

要么

这将被插入

这不会

另外,你使用什么界面? 沿途有什么东西可能会吃掉你的反斜杠吗?

  ask by rjohnston translate from so

未解决问题?本站智能推荐:

关注微信公众号