Django连接PostgreSQL数据库时出现Unicode编码解码错误求助
Django连接PostgreSQL时的UnicodeDecodeError解决方法
问题详情
报错信息:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 86: invalid start byte
错误触发位置:
File "C:\Users\Robo\Desktop\Stock\venv\Lib\site-packages\psycopg2\__init__.py", line 122, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
已尝试但无效的数据库配置:
DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "NAME": "Stocks", "USER": "postgres", "PASSWORD": "password", "HOST": "127.0.0.1", "PORT": "5432", "encoding": "utf-8", } }
解决步骤
1. 修正Django数据库配置参数
Django的PostgreSQL后端不支持直接写encoding参数,需将编码配置放在OPTIONS字典的client_encoding字段下:
DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "NAME": "Stocks", "USER": "postgres", "PASSWORD": "password", "HOST": "127.0.0.1", "PORT": "5432", "OPTIONS": { "client_encoding": "utf8", }, } }
2. 检查目标数据库的编码
登录PostgreSQL命令行,执行\l查看Stocks数据库的编码,确认其为UTF8。若编码不符,需重新创建数据库:
CREATE DATABASE Stocks ENCODING 'UTF8';
3. 排查系统编码环境
Windows系统默认编码可能为非UTF8,可通过设置环境变量强制Python使用UTF8:
set PYTHONUTF8=1
设置后再启动Django项目。
4. 验证数据库凭证字符编码
确认数据库用户名、密码、数据库名中没有非UTF8编码的特殊字符,若有则替换为UTF8兼容字符,或暂时使用纯ASCII凭证测试连接。
内容的提问来源于stack exchange,提问作者Robert Wyszynski
相关产品推荐
相关产品推荐

