ITPub博客

首页 > 数据库 > Oracle > linux乱码和数据库乱码的问题简单排查

linux乱码和数据库乱码的问题简单排查

Oracle 作者:瀚海小王子 时间:2014-09-21 13:21:09 0 删除 编辑
在本地的虚拟机环境一直凑合着用英文,今天想看看中文的东西都显示乱码,下定决心要把问题解决了。
如果直接打印文本内容,通过putty也会显示乱码。
[ora11g@rac1 ~]$ cat aa.sh
δ? ε??ο?θ?ζ―δ?δ??ζ?θ―
[ora11g@rac1 ~]$


这个时候很可能是putty的编码转换的问题,通过查看putty的设置,如上,可以看到应该选为utf-8。
选为UTF-8以后,重新打印,就没有问题了。

[ora11g@rac1 ~]$ cat aa.sh
你好,这是一个测试

第一个问题解决了,第二个问题又来了,来看看数据库层面的乱码问题。
[ora11g@rac1 ~]$ sqlplus n1/n1

SQL> select *from test;

        ID NAME
---------- -----------------------------
         1 ??????

 这个时候看看环境变量NLS_LANG的设置,如果为空,很可能会出问题。
[ora11g@rac1 ~]$ echo $NLS_LANG

[ora11g@rac1 ~]$


简单设置一下,这个最好和数据库层面的字符集要一致。
[ora11g@rac1 ~]$ echo $NLS_LANG
american_america.AL32UTF8
再来查看一下,就没有问题了。

SQL> select *from test;

        ID NAME
---------- -----------------------------
         1 突破玩法界限

当然了,我的这个问题刚好数据库层面是完全支持的,这样就省去了很多额外的工作,如果数据库层面的字符集不支持,那很可能就得重建库来改变字符集了。

 

    select *from nls_database_parameters
SQL> /

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET               AL32UTF8
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.3.0

 


另外系统层面的乱码,网上查看了一下,有些人建议修改/etc/sysconfig/i18n的设置。
[ora11g@rac1 ~]$ cat /etc/sysconfig/i18*
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

如果修改为中文的,一定要注意设置的值,在我本地做测试,是不需要修改的,本身就支持,我修改的时候,竟然改错了,结果重新登录及报了一大堆的错误,如下:
[ora11g@rac1 caipiao]$ su - ora11g
Password:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (zn_CN.UTF-8): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (zn_CN.UTF-8): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (zn_CN.UTF-8): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (zn_CN.UTF-8): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (zn_CN.UTF-8): No such file or directory
如果修改,应该改为zh_CN,算是一个低级错误。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29900508/viewspace-1275865/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-09-21

  • 博文量
    219
  • 访问量
    175844