문제

테이블에 이스케이프 문자를 삽입하려고 하면 경고가 발생합니다.

예를 들어:

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 사용)

이 문제를 해결하는 방법을 아는 사람이 있나요?

도움이 되었습니까?

해결책

부분적으로.텍스트가 삽입되었지만 여전히 경고가 생성됩니다.

다음과 같이 텍스트 앞에 '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 표준의 확장인 "escape" 문자열 상수도 허용합니다.이스케이프 문자열 상수는 여는 작은따옴표 바로 앞에 문자 E(대문자 또는 소문자)를 써서 지정됩니다.에'푸'.(행 전체에 걸쳐 이스케이프 문자열 상수를 계속하는 경우 첫 번째 여는 따옴표 앞에 E만 씁니다.) 이스케이프 문자열 내에서 백슬래시 문자(\)는 C와 유사한 백슬래시 이스케이프 시퀀스를 시작합니다. 여기서 백슬래시와 다음 문자( s)는 특수 바이트 값을 나타냅니다.\b는 백스페이스, \f는 폼 피드, 은 개행, 은 캐리지 리턴, 는 탭입니다.또한 digits가 8진수 바이트 값을 나타내는 \digits와 16진수 바이트 값을 나타내는 \xhexdigits도 지원됩니다.(만드는 바이트 시퀀스가 ​​서버 문자 집합 인코딩의 유효한 문자인지는 사용자의 책임입니다.) 백슬래시 뒤에 오는 다른 모든 문자는 문자 그대로 사용됩니다.따라서 백슬래시 문자를 포함하려면 두 개의 백슬래시(\\)를 작성하십시오.또한 일반적인 '' 방식 외에 \'를 작성하여 이스케이프 문자열에 작은따옴표를 포함할 수도 있습니다.

문자열에 백슬래시를 사용하고 있으므로 경고가 발생합니다.메시지를 표시하지 않으려면 "setstandard_conforming_strings=on;" 명령을 입력하세요.그런 다음 postgresql에서 해석할 백슬래시를 포함한 문자열 앞에 "E"를 사용하십시오.

Postgres가 입력 시 데이터를 자를 가능성은 거의 없습니다. 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=>

정말 멍청한 질문:문자열이 잘리고 지정한 줄 바꿈 부분에서 끊어진 것이 아니라(인터페이스에 표시되지 않을 수도 있음) 확실합니까?즉, 필드가 다음과 같이 표시될 것으로 예상합니까?

이것은 삽입 될 것입니다 n 이것은 아닙니다.

또는

이 삽입됩니다

이것은되지 않습니다

또한 어떤 인터페이스를 사용하고 있습니까?도중에 백슬래시를 먹는 것이 가능합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top