PostgreSQL执行\copy导入JSON文档时编码转换报错求助
解决PostgreSQL \copy导入JSON时的编码转换错误
这个错误本质上是编码不匹配导致的:你的JSON文件采用的是WIN1254编码(土耳其语环境常用的Windows字符集),但PostgreSQL的客户端或数据库默认使用UTF8编码,而WIN1254中的0x9e字节(对应Unicode字符Ş,带点的大写S)在直接用UTF8解析时无法被识别,从而触发报错。
下面是几种可行的解决方法:
直接在\copy命令中指定文件编码
PostgreSQL的\copy命令支持通过ENCODING参数指定源文件的编码,让数据库自动完成转换。修改你的导入语句为:\copy document_json FROM '/path/to/document.json' WITH (ENCODING 'WIN1254');这样PostgreSQL会按照WIN1254编码读取文件,再转换成UTF8存储到表中。
先转换文件编码为UTF8再导入
如果不想修改导入命令,可以先用工具把JSON文件转成UTF8编码:- 在Linux/macOS下,使用
iconv命令:iconv -f WIN1254 -t UTF8 /path/to/document.json > /path/to/document_utf8.json - 转换完成后,导入新的UTF8版本文件:
\copy document_json FROM '/path/to/document_utf8.json';
- 在Linux/macOS下,使用
检查并调整客户端编码
先确认当前PostgreSQL客户端的编码设置:SHOW client_encoding;如果输出不是
UTF8,可以临时切换到UTF8:SET client_encoding TO 'UTF8';再结合前面的方法重新尝试导入。
内容的提问来源于stack exchange,提问作者gisml




