在 postgreSQL 中,我使用pgcrypto模块调用pgp_sym_encrypt函数(返回 bytea 类型)并将结果保存到文本列中:
例如,我有一个带有columnA列(文本)的测试表:
CREATE EXTENSION pgcrypto;
insert into test (columnA) values (pgp_sym_encrypt('test','test'));
如果我在控制台中运行,结果类似于(转义二进制):
\303\015\004\007\003\002\022\261B\015\376\235\023\010j\3225\001\244l\253\332\026\037\\Q\305\253\365H\264\222\021\233\345\326\036Ma\346vwq\373\201\303\300\000\303\354\327:\017\020\036Q\201\025\210\364%\215$\017\304Y^_&\267
如果我在 JDBC 中运行,结果类似于(十六进制格式):
public class Main {
public static void main(String[] args) throws Exception {
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/db", "postgres", "postgres");
Statement stmt = connection.createStatement();
String sql = "insert into test (columnA) values (pgp_sym_encrypt('test','test'))";
stmt.executeUpdate(sql);
connection.close();
}
}
结果:
\xc30d040703026859a0885a496bc66bd240018d9cbede4805fc5b733afc706d061ae613600962222f008ab2fc4e99cc1c87841e3929833066ba42697784276c49efa67655a399fa9f77264769a42eb7c85e
如果我使用pgp_sym_decrypt解密,两者都可以流畅地解密,但我想知道为什么结果格式不同。如果我想要相同的格式,我该怎么办?
更新: 我知道它们是转义格式和十六进制格式,可以设置为@Vao Tsun 答案。但我想知道为什么,我认为他们必须使用相同的默认格式?JDBC 是否覆盖了格式?这种默认格式是否有任何 JDBC 配置,或者我必须在每个事务中调用 set 语句?