每次我运行"加密"或"摘要"命令时,我的输出都包含字符"\"的多个实例。
请参阅示例"select encrypt('123456789012345','1234','aes'(;" - 预期输出:"\x34591627f9c8eae417fc7cbbf458592c">
而我的输出如下:"4Y\026'\371\310\352\344\027\374|\273\364XY,">
这同样适用于摘要命令;我是否错误地安装了 pgcrypto?
encrypt
的返回类型是 bytea
,可以用不同的方式表示。您的两个不同的输出只是相同值的两个表示(注意"转义"格式中的奇怪转义(:
test=# select (bytea E'4Y\026''\371\310\352\344\027\374|\273\364XY,') =
test-# (bytea 'x34591627f9c8eae417fc7cbbf458592c') as eq;
eq
----
t
(1 row)
在我安装的PostgreSQL上,"hex"格式是默认格式,但由于这对您来说不是真的,您可以设置bytea_output
,它控制字节值的输出:
test=# select encrypt('123456789012345','1234','aes');
encrypt
---------------------------------------------
4Y 26'371310352344 27374|273364XY,
(1 row)
test=# set bytea_output = 'hex';
SET
test=# select encrypt('123456789012345','1234','aes');
encrypt
------------------------------------
x34591627f9c8eae417fc7cbbf458592c
(1 row)
您还可以对字节进行显式编码以获取text
值:
test=# select encode(encrypt('123456789012345','1234','aes'), 'hex');
encode
----------------------------------
34591627f9c8eae417fc7cbbf458592c
(1 row)