我有一个使用 WIN1252 编码的 PostgreSQL 10 数据库。
从 pgAdmin 4 运行选择时,我的其中一列的值会导致转换错误:
SELECT myfield FROM mydb.myschema."MYTABLE"
回报:
ERROR: character with byte sequence 0x9d in encoding "WIN1252" has no
equivalent in encoding "UTF8"
SQL state: 22P05
在 pgAdmin 4 中将客户端编码设置为 WIN1252 会导致它断开与数据库的连接(我记得在某处读到 pgAdmin 4 在设置客户端编码时存在问题,但请追踪链接)。
使用 psql 并将客户端编码设置为 WIN1252,选择有问题的功能之一:
SELECT myfield
FROM mydb.myschema."MYTABLE"
WHERE oid = 12345
回报:
“A sample comment
查看最初导入数据库的数据,“弯引号”似乎被错误地导入。
有没有办法从列中删除这些字符 - 用常规引号替换它们,或者干脆删除它们?
查看 WIN1252 字符集: https ://en.wikipedia.org/wiki/Windows-1252 ,没有对应于该十六进制代码的字符
9D
。81
,8D
,8F
,也是如此90
。这就是为什么它在 UTF8 中“不等效”的原因:该字符在源映射中首先不存在。
WIN1252
在以编码配置的会话中显示或输入时,它不会出错。当在 cmd.exe 上使用带有 psql.exe 的正确代码页 (chcp 1252
) 时,这些字符在我的环境中显示为矩形框内的问号。无论如何,您可能希望使用以下语句删除这些(使用 WIN1252 客户端编码时):
如果 WIN1252 无法与 PgAdmin 一起使用,请使用 psql。删除这些字符后,您可以稍后切换到 UTF8 客户端编码。
我想你是在倒着读。而是尝试
SET
将client_encoding 改为utf8
;。