sqlplus 汉字乱码问题的解决

 

从数据库中导一个数据的时候出现了一个很奇怪的问题,中文乱码。 首先可以确认的一点,数据在数据库中是以中文存在的,还有就是用Toad进行连接查询的时候也是中文。 但是在服务器端直接用sqlplus 连接查询之后,所有中文都显示为乱码。 第一反应是字符集的问题,也尝试用修改字符集来解决问题,最终问题还是出在系统的环境变量上。  

 

关于数据库字符集的问题,参考我的blog

 

Oracle 字符集的查看和修改

http://blog.csdn.net/tianlesoftware/archive/2009/12/02/4915223.aspx

 

 

解决方法:

 

1. export 参数

 $ export NLS_LANG="simplified chinese_china.zhs16gbk"

 

2. 修改配置单数

修改.bash_profile 中的参数,添加相关信息

NLS_LANG="simplified chinese_china.zhs16gbk";

 Export NLS_LANG;

 

以上是在Linux平台,windows 平台用

C:> NLS_LANG="simplified chinese_china.zhs16gbk"

或者添加一个环境变量就可以了。

 

 

3. 补充一点知识:

 

Nls_lang Linux 系统的环境变量;
Nls_language
是数据库的参数。

我们可以在session中修改Nls_language,不能修改Nls_lang

 

示例:

SQL> ALTER SESSION SET NLS_LANGUAGE= 'SIMPLIFIED CHINESE'

SQL> alter session set nls_lang=American_America.ZHS16GBK;
alter session set nls_lang=American_America.ZHS16GBK
*
ERROR at line 1:
ORA-00922: missing or invalid option

 

 

Oracle 的相关参数我们可以通过以下SQL语句查看:

 

SQL> col PARAMETER format a30

SQL> col VALUE format a30

SQL> select * from v$NLS_PARAMETERS;

 

PARAMETER                      VALUE

------------------------------ ------------------------------

NLS_LANGUAGE                   SIMPLIFIED CHINESE

NLS_TERRITORY                  CHINA

NLS_CURRENCY                  

NLS_ISO_CURRENCY               CHINA

NLS_NUMERIC_CHARACTERS         .,

NLS_CALENDAR                   GREGORIAN

NLS_DATE_FORMAT                YYYY-MM-DD HH24:MI:SS

NLS_DATE_LANGUAGE              AMERICAN

NLS_CHARACTERSET               ZHS16GBK

NLS_SORT                       BINARY

NLS_TIME_FORMAT                HH.MI.SSXFF AM

 

PARAMETER                      VALUE

------------------------------ ------------------------------

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_NCHAR_CHARACTERSET         AL16UTF16

NLS_COMP                       BINARY

NLS_LENGTH_SEMANTICS           BYTE

NLS_NCHAR_CONV_EXCP            FALSE

 

已选择19行。

 

SQL>

 


------------------------------------------------------------------------------
QQ: 492913789
Email: ahdba@qq.com
Blog: http://www.cndba.cn/dave
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(满);   DBA2 群:62697977(满)   DBA3 群:62697850(满)  
DBA 超级群:63306533(满);  DBA4 群: 83829929  DBA5群: 142216823   
DBA6 群:158654907  聊天 群:40132017   聊天2群:69087192
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!有关 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、付费专栏及课程。

余额充值