Windows10下使用psql.exe执行SQL文件后出现特殊字符乱码如何解决?
psql执行含特殊字符SQL脚本乱码解决方案
该乱码为典型的编码不匹配问题:
ö的UTF-8编码为0xC3 0xB6,被误按CP1252解码后正好对应你看到的ö,核心原因是psql客户端、控制台代码页、SQL脚本三者的编码不统一。
操作步骤
- 首先确认
C:\populate_users.sql脚本的保存编码,优先使用UTF-8编码保存脚本。 - 调整控制台编码为UTF-8,替换你之前使用的
chcp 1252:chcp 65001 - 设置PostgreSQL客户端编码环境变量,指定psql用UTF-8解析输入内容:
# Windows CMD 环境执行 set PGCLIENTENCODING=UTF8 # Windows PowerShell 环境执行 $env:PGCLIENTENCODING = "UTF8" - (PowerShell环境可选)避免控制台输出也出现乱码,提前执行:
$OutputEncoding = [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false) - 重新执行原导入命令即可:
psql.exe -h localhost -U postgres -d my_database -f C:\populate_users.sql
备选方案(脚本为CP1252编码时使用)
如果执行上述步骤后仍存在乱码,说明你的SQL脚本本身是CP1252编码保存的,直接执行以下操作即可:
- 保留
chcp 1252的设置 - 执行环境变量配置:
# CMD 环境 set PGCLIENTENCODING=CP1252 # PowerShell 环境 $env:PGCLIENTENCODING = "CP1252" - 重新执行psql导入命令即可。
内容的提问来源于stack exchange,提问作者Slamdunk
相关产品推荐
相关产品推荐

