2011-05-10 4 views
0

업데이트 쿼리를 사용 중입니다. 예 : -ENCRYPE/DECRYPT에서 백 슬래시 ()를 처리하는 방법

UPDATE tbl_ecpuser 
    SET ecpuser_fullname = 'Operator', 
    ecpuser_password = encrypt(E'Op1111/1\1/1\1' , 'ENCRYPE_KEY', 'ENCRYPE_ALGORITHM'), 
    where ecpuser_key = '0949600348' 

쿼리가 성공적으로 실행됩니다. 내가 열 ecpuser_password의 값을 가져 오지 것을 시도 할 때

, 그것은 암호는 몇 가지 추가 문자 반환 (IE-00)

쿼리 인 PIN이를 위해 : -

SELECT 
    decrypt(ecpuser_password,'ENCRYPE_KEY','ENCRYPE_ALGORITHM') AS PASSWORD 
    FROM tbl_ecpuser 
    WHERE 
    ecpuser_key = '0949600348' 

이 쿼리는

"Op1111/1\001/1\001" 

을 returens하지만 "Op1111/1\1/1\1를 반환해야 "내가이 필요합니다.

그래서 어떤 몸이라도 이것에 대해 나를 도울 수 있습니다.

감사합니다.

답변

0

E'\1'과 같이 보이는 문자는 chr (1)로 취급되어 그에 따라 반환됩니다.

원할 것 : E'\\1'.

+0

안녕하세요 Denis, suggetion에 감사드립니다. 그러나 E '\\'는 여기서 작동하지 않을 것입니다. 이것은 다른 사람들에게 유용 할 수 있습니다. 그러나 이것은 암호 필드이고, 암호 필드에 대한 데이터 유형을 사용하는 메신저는 BYTE입니다. 따라서 "bytea 유형에 대해 유효하지 않은 입력 구문 오류가 발생합니다". – Binaya

1

PostgreSQL이 SQL 표준을 준수하지 않는 곳 중 하나는 문자열 리터럴에서 백 슬래시를 처리하는 것입니다.

8.2 이후로 PostgreSQL이 표준을 따르도록 구성 속성 standard_conforming_strings을 사용할 수 있습니다.

"켜기"로 설정하면 '\1'은 두 개의 문자 (백 슬래시 하나와 문자 1)가있는 문자열로 올바르게 처리됩니다.

이 켜져 있으면 접두사 E가 이스케이프 시퀀스를 다시 활성화합니다.

(올바르게 문제를 이해하는 경우) standard_conforming_strings = on을 설정하고 앞에 E없이 문자열 리터럴을 지정해야합니다.

관련 문제