一、概述

SqlPlus乱码与操作系统用户中的NLS_LANG这个环境变量有关系,如果这个与数据库字符集不一致的话就会产生乱码

二、分析

查看系统环境变量NLS_LANG
echo $NLS_LANG

查看数据库字符集
SQL> SELECT * FROM NLS_DATABASE_PARAMETERS;
PARAMETER VALUE
------------------------------ ----------------------------------
NLS_LANGUAGE AMERICAN -- 显示方式,就是 SQLPLUS 的程序的显示字体,有SIMPLIFIED CHINESE,AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET AL32UTF8 -- 字符集设定, 常用的有UTF8,US7ASCII,WE8ISO8859P1,ZHS16GBK,AL32UTF8
NLS_CALENDAR GREGORIAN

查询NLS_LANG即操作系统环境变量要设为 NLS_LANGUAGE_NLS_TERRITORY.NLS_CHARACTERSET,如:
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

重新sqlplus / as sysdba查看