温馨提示×

ubuntu oracle中文乱码咋办

小樊
58
2026-10-07 17:36:13
栏目: 云计算

在 Ubuntu 上使用 Oracle(通常是 Oracle Instant Client / Oracle DB / sqlplus) 出现中文乱码,一般是字符集不一致导致的。可以按下面步骤排查和解决。


一、先确认乱码原因(很重要)

乱码通常是以下一种或多种情况:

  1. 客户端字符集 ≠ 数据库字符集
  2. Ubuntu 系统本身 locale 不是 UTF-8
  3. 终端不支持中文
  4. 使用 sqlplus / 程序未设置 NLS_LANG

二、查看数据库字符集(在 Oracle 中执行)

SELECT parameter, value
FROM nls_database_parameters
WHERE parameter IN ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');

常见结果:

  • AL32UTF8 ✅(推荐)
  • ZHS16GBK

三、设置 Ubuntu 系统 locale(必须 UTF-8)

1. 查看当前 locale

locale

如果不是 UTF-8,执行:

sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8

重新登录或重启终端。


四、设置 Oracle 客户端字符集(关键)

如果是 UTF-8 数据库(最常见)

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

如果是 GBK 数据库

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

✅ 建议写入 .bashrc 或 .profile:

echo 'export NLS_LANG=AMERICAN_AMERICA.AL32UTF8' >> ~/.bashrc
source ~/.bashrc

五、终端 & 工具问题

1. 使用 sqlplus

确保终端是 UTF-8:

echo $LANG
# 应该是 zh_CN.UTF-8 或 en_US.UTF-8

2. 使用 SecureCRT / Xshell / PuTTY

  • 编码设置为 UTF-8
  • 不要选 GBK

六、Java / Python 程序连接 Oracle 乱码

JDBC

jdbc:oracle:thin:@host:1521:orcl?useUnicode=true&characterEncoding=UTF-8

Python (cx_Oracle)

import os
os.environ["NLS_LANG"] = "AMERICAN_AMERICA.AL32UTF8"

七、快速自检清单 ✅

  • [ ] locale 是 UTF-8
  • [ ] NLS_LANG 已设置
  • [ ] 数据库字符集已知
  • [ ] 终端编码 UTF-8
  • [ ] sqlplus / 程序重启过

如果你愿意,可以告诉我:

  • Oracle 版本
  • 是 sqlplus / Java / Python / 其他
  • 乱码是读出来乱还是写进去乱

我可以直接给你精确配置命令。

0 踩