PostgreSQL中ByteA数据解码:非英文字符显示异常求助
PostgreSQL ByteA 非英文字符显示异常的解决方法
问题根源
你当前使用的encode(cont_json, 'escape')会将ByteA中的非ASCII字节转换为八进制转义序列(比如ä变成\334),后续的replace操作仅处理了空字符和转义符,并未将转义序列还原为原始字符,导致非英文字符显示异常。
正确解决方案
直接使用convert_from函数将ByteA类型的二进制数据转换为指定编码的文本,无需多余的encode和replace操作:
1. 匹配原始数据编码执行查询
首先确认cont_json存储时使用的字符编码,对应执行以下SQL:
- 如果是**ISO-8859-1(Latin-1)**编码(
\334正是该编码下ä的八进制表示):
SELECT convert_from(cont_json, 'ISO-8859-1') FROM dbo.cont_encode WHERE cont_ID=2;
- 如果是UTF-8编码:
SELECT convert_from(cont_json, 'UTF8') FROM dbo.cont_encode WHERE cont_ID=2;
2. 错误尝试的问题说明
你之前用的convert_from(decode('column', 'base64'), 'utf-8')存在两处错误:
decode('column', 'base64')是对字符串'column'做base64解码,而非调用cont_json列的数据;- 如果
cont_json本身是原始二进制数据,不需要额外的base64解码步骤,直接用convert_from即可完成二进制到文本的转换。
验证结果
执行上述正确查询后,非英文字符(如ä)会显示为原始字符,而非八进制转义序列。
内容的提问来源于stack exchange,提问作者synccm2012
相关产品推荐
相关产品推荐

