每次我运行“加密”或“摘要”命令时,我的输出都包含多个字符“\”实例。
参见示例“选择加密('123456789012345','1234','aes');” - 预期输出:“\x34591627f9c8eae417fc7cbbf458592c”
而我的输出如下:“4Y\026'\371\310\352\344\027\374|\273\364XY”
这同样适用于摘要命令;我是否错误地安装了 pgcrypto?
每次我运行“加密”或“摘要”命令时,我的输出都包含多个字符“\”实例。
参见示例“选择加密('123456789012345','1234','aes');” - 预期输出:“\x34591627f9c8eae417fc7cbbf458592c”
而我的输出如下:“4Y\026'\371\310\352\344\027\374|\273\364XY”
这同样适用于摘要命令;我是否错误地安装了 pgcrypto?
is的返回类型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 中,“十六进制”格式是默认格式,但由于这对您不适用,您可以设置bytea_output
,它控制字节值的输出:
test=# select encrypt('123456789012345','1234','aes');
encrypt
---------------------------------------------
4Y\026'\371\310\352\344\027\374|\273\364XY,
(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)