我正在使用更新查询。 即: -
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
“,我需要这个。
所以任何人都可以帮助我。
感谢。
答案 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'
。