Programming

postgresql의 문자열 리터럴 및 이스케이프 문자

procodes 2020. 8. 13. 21:41
반응형

postgresql의 문자열 리터럴 및 이스케이프 문자


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

예를 들면 :

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


문자열에 백 슬래시를 사용하고 있기 때문에 경고가 발생합니다. 메시지를 표시하지 않으려면 "set standard_conforming_strings = on;"명령을 입력하십시오. 그런 다음 postgresql이 해석 할 백 슬래시를 포함하여 문자열 앞에 "E"를 사용합니다.


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

또는

이것은 삽입됩니다

이것은 아닙니다

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

참고URL : https://stackoverflow.com/questions/935/string-literals-and-escape-characters-in-postgresql

반응형