Попытка вставить характер спасения в стол приводит к предупреждению.
Например:
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
(Using PSQL 8.2)
Кто-либо знает, как обойти это?
Частично. Текст вставлен, но предупреждение все еще произведено.
Я нашел обсуждение, которое указало, что тексту нужно было предшествовать с ' 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');
Прохладный.
Я также нашел документацию относительно E:
http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS
PostgreSQL также принимает " escape" константы последовательности, которые являются расширением к стандарту SQL. Постоянная последовательность спасения определена, сочиняя букву E (верхний или нижний регистр) незадолго до вводной единственной цитаты, например, E' foo'. (Продолжая последовательность спасения, постоянную через линии, напишите E только перед первой вводной цитатой.) В последовательности спасения характер обратной косой черты (\) начинает подобную C последовательность спасения обратной косой черты, в которой комбинация обратной косой черты и после характера (характеров) представляет специальную стоимость байта. \b - клавиша Backspace, \f - подача формы, \n - newline, \r - перевод каретки, \t - счет. Также поддержанный \цифры, где цифры представляют октальную стоимость байта, и \xhexdigits, где hexdigits представляет шестнадцатеричную стоимость байта. (Это - Ваша ответственность, что последовательности байта, которые Вы создаете, являются действительными знаками в кодировании кодировки сервера.) Любой другой характер после обратной косой черты взят буквально. Таким образом, чтобы включать характер обратной косой черты, напишите две обратных косых черты (\\). Кроме того, единственная цитата может быть включена в последовательность спасения, сочиняя \' в дополнение к нормальному способу ' '.
Предупреждение выпущено, так как Вы используете обратные косые черты в своих последовательностях. Если Вы хотите избежать сообщения, напечатайте эту команду " набор standard_conforming_strings=on; ". тогда используйте " E" перед Вашей последовательностью включая обратные косые черты, которые Вы хотите, чтобы postgresql интерпретировал.
Я нахожу, что он очень вряд ли для Пост-ГРЭС усекает Ваши данные по входу - это или отклоняет его или хранит его, как.
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=>
Действительно глупый вопрос: действительно ли Вы уверены, что последовательность усеченная, и не только сломанная в linebreak, который Вы определяете (и возможно не показывающий в Вашем интерфейсе)? Т.е., сделайте Вы ожидаете, что область покажет как
Это будет вставлено \n, Это не будет быть
или
Это будет вставлено
Это не будет
Кроме того, какой интерфейс Вы используете? Действительно ли возможно, что что-то по пути ест Ваши обратные косые черты?