Linux下sqlplus显示乱码

1、现象       
在公司项目中,由于字符集全部采用的utf-8编码,SecurCRT采用utf-8字符集,导致脚本文件、代码中的汉字全部显示乱码。
将上述文件的编码格式全部转换为 UTF-8格式另存,重新刷脚本、编译,中文字符能够正常显示。

但是,发现在提取数据时,中文还是乱码。

通过sqlplus连接数据库,提取数据,也是乱码。说明系统的字符集与oracle数据库的字符集不一致

 

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"
就行了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员柒叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值