您的位置:首页 > 数据库

sql*plus显示乱码问题

2016-08-30 16:13 411 查看

1、现象
最近使用oracle新搭环境发现通过sqlplus登陆时,显示乱码,如下图所示,严重影响sqlplus的使用:



2、解决方案

通过查阅资料发现sqlplus乱码与操作系统用户中的NLS_LANG这个环境变量有关系,如果这个与数据库字符集不一致的话就会产生乱码。坚持NLS_LANG这个环境变量发现根本就没有设置这个变量,则应该是读取操作系统字符集来作为默认字符集。

[oracle@localhost ~]$ echo $NLS_LANG

[oracle@localhost ~]$ 

如何查看数据库字符集,通过nls_database_parameters查询,可以得到NLS_CHARACTERSET的值为UTF8即为数据库字符集

SQL>  col parameter for a30
SQL> col value for a25
SQL>  select * from nls_database_parameters;

PARAMETER                      VALUE
------------------------------ -------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET               UTF8
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM
                               TZR

NLS_DUAL_CURRENCY              $
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_RDBMS_VERSION              11.2.0.1.0

查询NLS_LANG的组成规则为NLS_LANGUAGE_NLS_TERRITORY.NLS_CHARACTERSET,即操作系统环境变量应该要设置为AMERICAN_AMERICA.UTF8。如下图所示,乱码解决了:



顺利解决了乱码问题,修改.profile(unix 系统)或.bash_profile,增加
 export NLS_LANG="AMERICAN_AMERICA.UTF8"
就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: