返回 Bug 清单
BUG-0050project-09高已修复db-connection-encoding

Windows 中文环境下 psycopg2 UnicodeDecodeError

发现:2026-09-30验证:2026-10-27置信度:85%

症状

Windows 中文环境下执行 `alembic upgrade head`,psycopg2 报错: ``` UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 61: invalid continuation byte ``` ([cursor_202606072236.md:466](file://d:/chemindra/cursor_202606072236.md#L466)、[cursor_202606072236.md:538](file://d:/chemindra/cursor_202606072236.md#L538) 两次重现)

根因

libpq 在连接失败时返回系统语言编码(GBK)的错误信息,psycopg2 尝试以 UTF-8 解码失败。Windows 中文环境下 `.env` 中的特殊字符也被错误编码传递。

修复方案

(`commit 1d6a90d` `fix: Windows 本地 PostgreSQL 开发与 bcrypt 兼容`): 1. `config.py` 启动时设置 `os.environ.setdefault("PGCLIENTENCODING", "UTF8")` 2. `session.py` 连接参数添加 `client_encoding="utf8"` + `connect_timeout=10` 3. `alembic/env.py` 同样添加 `client_encoding` 和 `PGCLIENTENCODING` 4. Settings 同时从 `_SERVER_ROOT / .env` 和 `_REPO_ROOT / .env` 查找

修复命令

(`commit 1d6a90d` `fix: Windows 本地 PostgreSQL 开发与 bcrypt 兼容`):
1. `config.py` 启动时设置 `os.environ.setdefault("PGCLIENTENCODING", "UTF8")`
2. `session.py` 连接参数添加 `client_encoding="utf8"` + `connect_timeout=10`
3. `alembic/env.py` 同样添加 `client_encoding` 和 `PGCLIENTENCODING`
4. Settings 同时从 `_SERVER_ROOT / .env` 和 `_REPO_ROOT / .env` 查找

错误签名

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 61: invalid continuation byte

技术信息

来源项目

project-09

涉及文件

apps/server/app/core/config.py, apps/server/app/db/session.py, apps/server/alembic/env.py

标签

db-connection-encoding, project-09