You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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';
      
  • 检查并调整客户端编码
    先确认当前PostgreSQL客户端的编码设置:

    SHOW client_encoding;
    

    如果输出不是UTF8,可以临时切换到UTF8:

    SET client_encoding TO 'UTF8';
    

    再结合前面的方法重新尝试导入。

内容的提问来源于stack exchange,提问作者gisml

火山引擎 最新活动