在 Linux 上配置或使用 Oracle 时出现乱码,通常不是 Oracle 本身坏了,而是字符集不一致或终端/环境设置不对。下面按常见原因和解决办法说明。
Oracle 数据库、操作系统、客户端(SQL*Plus / 终端)三者字符集必须“对得上”。
SELECT parameter, value
FROM nls_database_parameters
WHERE parameter IN ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
常见正常结果:
AL32UTF8(推荐)ZHS16GBK(中文环境老系统)locale
echo $LANG
理想情况:
LANG=zh_CN.UTF-8
????NLS_LANG 没设或设错
如果数据库是 AL32UTF8:
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export LANG=zh_CN.UTF-8
如果数据库是 ZHS16GBK:
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export LANG=zh_CN.GBK
⚠️ NLS_LANG 的字符集必须和终端一致
即使 Linux 是对的,终端软件错了也会乱码。
export LANG=en_US.UTF-8
或
export LANG=C
再启动 runInstaller
⚠️ 如果数据已存错字符集,基本无法无损恢复
只能:
| 项目 | 建议 |
|---|---|
| 操作系统 | UTF-8 |
| Oracle | AL32UTF8 |
| NLS_LANG | AMERICAN_AMERICA.AL32UTF8 |
| 终端 | UTF-8 |
locale 正常NLS_LANG 已设置如果你愿意,可以告诉我:
我可以给你精确的一条命令解决方案。