SQLAlchemy and Postgres UnicodeDecodeError



我面临的问题与此处发布的SQLAlchemy和UnicodeDecodeError相同。当我从表中获取结果时,出现错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

提出的两种解决方案是在python中使用sy.setdefaultencoding('utf8') 并将其他字符集参数传递给连接字符串,如下所示:

conn_str='postgresql+psycopg2://'+str(dbhost)+':' + str(port) + '/postgres?charset=utf8'

这两种解决方案似乎都不能解决问题。我还可以调试什么?该表基本上是各个国家的 GIS 数据。所以桌子有特殊性。

似乎编码因服务器而异。您可以通过以下命令验证这一点:

SHOW client_encoding; --Equivalent to: SELECT current_setting('client_encoding');
SHOW server_encoding; --Equivalent to: SELECT current_setting('server_encoding');

PostgreSQL 自动转换为客户端编码。在您的环境中,两者可能不同。您可以通过多种方式配置client_encoding

  • 在应用程序中打开连接时使用SET命令:SET client_encoding = 'UTF-8';
  • 在应用程序中打开连接时使用set_config功能:SELECT set_config('client_encoding', 'UTF-8', true);
  • 在操作系统中配置PGCLIENTENCODING环境变量:export PGCLIENTENCODING=UTF8
  • 在 postgres 配置文件中编辑client_encoding
  • 使用ALTER SYSTEM(之后必须使用SELECT pg_reload_conf();刷新配置):ALTER SYSTEM SET client_encoding = 'UTF-8';

更新:不幸的是,无法从SQL_ASCII启用自动转换。

如果客户端字符集定义为SQL_ASCII,则编码 无论服务器的字符集如何,转换都将被禁用。只 至于服务器,除非您正在工作,否则使用SQL_ASCII是不明智的 包含所有 ASCII 数据。

引用自Postgres文档。

相关内容

  • 没有找到相关文章

最新更新