postgresql 在postgres中,encode函数使用的是什么编码?

carvr3hs  于 2023-02-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(427)

我在数据库中存储了一个bytea,我尝试通过encode函数将其转换为string,它工作正常:

select encode(blobvalue,'escape') from myTable ;

但是,以下操作失败:

select convert_from(blobvalue,'UTF8') from myTable ;

ERROR:  invalid byte sequence for encoding "UTF8": 0xac

我的服务器编码是UTF8:

SHOW SERVER_ENCODING;
 server_encoding
-----------------
 UTF8
(1 row)

任何解释为什么编码是工作的,但转换_从没有?是不是编码中使用的编码与转义相同的服务器编码?

qv7cva1a

qv7cva1a1#

encode()只将ASCII字节转换为字符。其他所有内容都将是转义的八进制值:

SELECT encode('\x4142AC43', 'escape');

 encode  
═════════
 AB\254C
(1 row)

这里,字节0xAC不是ASCII字符,并且呈现为\254
另一方面,convert_from()bytea视为某种编码的字符串,如果发现字节不正确,则会失败:

SELECT convert_from('\x4142AC43', 'UTF8');
ERROR:  invalid byte sequence for encoding "UTF8": 0xac

所以你必须弄清楚你的bytea值实际上是哪种编码。

相关问题