테이블에 이스케이프 문자를 삽입하려고 하면 경고가 표시됩니다.
예를 들어
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 사용)
이 문제를 해결하는 방법을 아는 분 있나요?
부분적으로. 텍스트가 삽입되었지만 경고가 계속 생성됩니다.
텍스트 앞에 &39;E'를 붙여야 한다는 토론을 발견했습니다:
insert into EscapeTest (text) values (E'This is the first part \n And this is the second');
이렇게 하면 경고가 표시되지 않았지만 텍스트가 여전히 올바르게 반환되지 않았습니다. Michael이 제안한 대로 슬래시를 추가했더니 제대로 작동했습니다.
이렇게요:
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은 SQL 표준의 확장인 이스케이프 문자열 상수도 허용합니다. 이스케이프 문자열 상수는 여는 작은따옴표 바로 앞에 문자 E(대문자 또는 소문자)를 써서 지정합니다(예: E'foo'). (이스케이프 문자열 상수를 여러 줄에 걸쳐 계속 사용할 때는 첫 번째 여는 따옴표 앞에만 E를 씁니다.). 이스케이프 문자열 내에서 백슬래시 문자(\)는 백슬래시와 다음 문자의 조합이 특수 바이트 값을 나타내는 C와 같은 백슬래시 이스케이프 시퀀스를 시작합니다. \b는 백스페이스, \f는 폼 피드, \n은 개행, \r은 캐리지 리턴, \t는 탭입니다. 또한 숫자가 8진수 바이트 값을 나타내는 \digits와 16진수 바이트 값을 나타내는 \xhexdigits도 지원됩니다. (생성한 바이트 시퀀스가 서버 문자 집합 인코딩에서 유효한 문자인지 확인하는 것은 사용자의 책임입니다.) 백슬래시 뒤에 오는 다른 문자는 문자 그대로 받아들여집니다. 따라서 백슬래시 문자를 포함하려면 백슬래시 두 개를 작성합니다(\\). 또한 일반적인 방법인 '' 외에 \'를 작성하여 이스케이프 문자열에 작은따옴표를 포함할 수 있습니다.
나는 그것을 찾을 수 있는 입력 데이터에 대한 잘라냅니다 인컨텍스트 거부됩니다 Postgres 매우 낮다 = 이 정보기술 (it) 또는 그대로 저장합니다.
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=>