如何在ENCRYPT / DECRYPT中处理反斜杠(\)

时间:2011-05-10 07:44:20

标签: postgresql

我正在使用更新查询。 即: -

 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 个答案:

答案 0 :(得分:1)

PostgreSQL不符合SQL标准的一个地方是字符串文字中反斜杠的处理。

自8.2以来,配置属性standard_conforming_strings可用于配置PostgreSQL以符合此处的标准。

如果将其设置为“on”'\1'被正确地视为包含两个字符(一个反斜杠和字符1)的字符串。

但是如果打开,前缀E会再次启用转义序列。

所以(如果我理解你的问题)你应该设置standard_conforming_strings = on并指定不带前导E的字符串文字。

答案 1 :(得分:0)

似乎E'\1'被视为chr(1)并相应地返回。

您可能想要:E'\\1'