Java PostgreSQL JDBC PreparedStatement';s setBytes更改参数值

Java PostgreSQL JDBC PreparedStatement';s setBytes更改参数值,java,postgresql,jdbc,prepared-statement,Java,Postgresql,Jdbc,Prepared Statement,我有一个包含bytea列的PostgreSQL表。例如: CREATE TABLE my_table ( text_col text NOT NULL, bytea_col bytea NOT NULL ); 表中的insert使用了一个类似以下内容的PreparedStatement: ... byte[] value = "ABC".getBytes(); String insertStmt = "INSERT INTO my_table (text_col, bytea_co

我有一个包含
bytea
列的PostgreSQL表。例如:

CREATE TABLE my_table (
   text_col text NOT NULL,
   bytea_col bytea NOT NULL
);
表中的insert使用了一个类似以下内容的
PreparedStatement

...
byte[] value = "ABC".getBytes();
String insertStmt = "INSERT INTO my_table (text_col, bytea_col) VALUES (?, ?)";    
PreparedStatement ps = conn.prepareStatement(insertStmt);
ps.setString(1, "SomeString");
ps.setBytes(2, value);
...
当打印字符串
ABC
的字节[]时,它是:
[65 66 67]
。 但是,当我查看数据库中插入的值时,它是:
\x414243
,我假设它相当于
[41 42 43]
的一个字节[]

因此,当我在WHERE子句中使用
[65 66 67]
进行查询时,永远找不到该行

select * from my_table where bytes_col = E'\\x656667';
PreparedStatement
中的
setBytes
是否更改了我传入的字节?这似乎是错误的。我做错什么了吗

当我查看数据库中插入的值时,它是:\x414243,我假设它相当于[41 42 43]的字节[]

这是一个错误的假设。
\x
表示数据以十六进制格式显示。因此
\x414243
相当于
[0x41、0x42、0x43]
字节[]
。在十进制中,这是
[65、66、67]
,在任何基数中,这是“A”、“B”和“C”的ASCII码。您的数据存储正确。您对它的查询不正确