Как обрабатывать обратную косую черту (\) в ENCRYPE / DECRYPT - PullRequest
0 голосов
/ 10 мая 2011

Я использую обновление Query. т.е.: -

 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, оно возвращается с некоторым дополнительным символом (т.е. 00)

Запрос на получение пароля: -

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

Этот запрос восстанавливает

"Op1111/1\001/1\001" 

но он должен вернуть "Op1111/1\1/1\1 "и мне это нужно.

Так может ли любое тело помочь мне в этом.

Спасибо.

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Одним из мест, где PostgreSQL не соответствовал стандарту SQL, была обработка обратной косой черты в строковых литералах.

Начиная с версии 8.2 доступно свойство конфигурации standard_conforming_strings , которое настраивает PostgreSQL для соответствия стандарту здесь.

Если установить значение «on», '\1' корректно обрабатывается как строка с двумя символами (один обратный слеш и символ 1).

Однако , если включено , префикс E снова разрешает escape-последовательности.

Итак (если я правильно понимаю вашу проблему) вы должны установить standard_conforming_strings = on и указать строковый литерал без начального E.

0 голосов
/ 10 мая 2011

Похоже, что E'\1' обрабатывается как chr (1) и возвращается соответственно.

Вы, вероятно, хотите: E'\\1'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...