sqlplus显示乱码处理方法

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

438414_201301202132151.thumb.jpg

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。如下图所示,乱码解决了:
438414_201301202149051.thumb.jpg

顺利解决了乱码问题,修改.profile(unix 系统)或.bash_profile,增加
 export NLS_LANG="AMERICAN_AMERICA.UTF8"
就行了。

参考资料:
http://zhumeng8337797.blog.163.com/blog/static/1007689142011111655113440/

fj.png01201.jpg

fj.png01202.jpg

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

转载于:http://blog.itpub.net/438414/viewspace-752956/

您好!有关 Oracle SQL*Plus 乱码的问题,我可以给您一些可能的解决方案。请尝试以下步骤来解决乱码问题: 1. 确保您的终端或客户端工具设置正确。在 Windows 环境下,可以在命令提示符中使用 `chcp` 命令检查当前的代码页设置,并确保它与数据库字符集一致。例如,如果数据库使用 UTF-8 字符集,则可以使用 `chcp 65001` 将代码页设置为 UTF-8。 2. 检查数据库字符集。您可以使用以下查询来确定数据库的字符集: ```sql SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'; ``` 确保客户端工具和数据库字符集一致。 3. 检查会话字符集。在 SQL*Plus 中,可以使用以下语句来检查当前会话的字符集: ```sql SELECT value FROM nls_session_parameters WHERE parameter = 'NLS_CHARACTERSET'; ``` 如果会话字符集与数据库字符集不匹配,可以尝试使用以下命令将会话字符集设置为数据库字符集: ```sql ALTER SESSION SET NLS_CHARACTERSET = <数据库字符集>; ``` 例如: ```sql ALTER SESSION SET NLS_CHARACTERSET = 'UTF8'; ``` 如果需要修改客户端字符集,可以使用以下语句: ```sql ALTER SYSTEM SET NLS_LANG = <客户端字符集>; ``` 例如: ```sql ALTER SYSTEM SET NLS_LANG = 'AMERICAN_AMERICA.UTF8'; ``` 4. 检查操作系统环境变量。确保操作系统的语言和区域设置正确,并与数据库字符集匹配。在 Windows 环境下,可以在控制面板的“区域和语言选项”中进行设置。 5. 确保数据库中存储的数据是正确的字符集编码。如果数据库中的数据已经损坏或包含错误的字符集编码,显示乱码是正常的。 6. 如果以上步骤都没有解决问题,可能需要考虑升级或重新安装 Oracle 数据库以确保字符集设置正确。 请注意,这些解决方案可能会因您的具体环境而有所不同。如果问题仍然存在,请提供更多详细信息,以便我能够更好地帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值