oracle经典乱码问题——靠靠靠靠

简介:

        最近在做一个项目的时候,遇到了一个问题,在window 2003 系统oracle 11g数据库进行select的时候,结果为“靠靠靠靠”,当时的运维人员对oracle不太了解,所以就找到了我,我查看服务端与客户端的字符集,发现服务端为zhs16gbk,客户端为american_america.we8iso8858p1,当我把客户端修改与服务端一致字符集的时候,问题解决了。

下面是我做的一个技术文档,为以后的人员学习oracle做个实例说明。

环境为:

window 2003 32系统、oracle 11g数据库

1、连接windows 2003的oracle 11g

 
 
  1. C:\>sqlplus / as sysdba
  2. SQL*Plus: Release 11.2.0.1.0 Production on 星期一 5月 21 15:03:29 2012
  3. Copyright (c) 1982, 2010, Oracle. All rights reserved.
  4. 连接到:
  5. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
  6. With the Partitioning, OLAP, Data Mining and Real Application Testing options
2、查看客户端的字符集
 
  1. SQL> select userenv('language') from dual;  
  2.  
  3. USERENV('LANGUAGE')  
  4. ----------------------------------------------------  
  5. AMERICAN_AMERICA.ZHS16GBK  
3、查看服务端的字符集
 
  1. SQL> set linesize 100  
  2. SQL> col parameter for a40  
  3. SQL> col value for a40  
  4. SQL> select * from nls_database_parameters where parameter like '%CHARACTERSET%%';  
  5.  
  6. PARAMETER                VALUE  
  7. ---------------------------------------- ----------------------------------------  
  8. NLS_CHARACTERSET             ZHS16GBK  
  9. NLS_NCHAR_CHARACTERSET       AL16UTF16  
可以看到客户端与服务端的字符集都是一致的,均为ZHS16GBK。
4、创建dl_char表
 
  1. SQL> create table dl_char (name varchar2(20));  
  2.  
  3. 表已创建。  
5、插入数据
 
  1. SQL> insert into dl_char values ('字符集的乱码问题');  
  2.  
  3. 已创建 1 行。  
6、进行select查询
 
  1. SQL> select * from dl_char;  
  2.  
  3. NAME  
  4. --------------------  
  5. 字符集的乱码问题  
可以看得,现在显示为我刚才输入的值
7、更改客户端的字符集
 
  1. C:\>SET NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 
8、然后重新登录
 
  1. C:\>sqlplus / as sysdba  
  2.  
  3. SQL*Plus: Release 11.2.0.1.0 Production on Mon May 21 15:06:55 2012  
  4.  
  5. Copyright (c) 1982, 2010, Oracle.  All rights reserved.  
  6.  
  7.  
  8. Connected to:  
  9. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production  
  10. With the Partitioning, OLAP, Data Mining and Real Application Testing options  
9、查看客户端的字符集
 
  1. SQL> select userenv('language') from dual;  
  2. USERENV('LANGUAGE')  
  3. ----------------------------------------------------  
  4. AMERICAN_AMERICA.ZHS16GBK  
可以看到客户端的字符集已经变为AMERICAN_AMERICA.ZHS16GBK了
10、然后查看dl_char的值
 
  1. SQL> select * from dl_char;  
  2.  
  3. NAME  
  4. --------------------  
  5. 靠靠靠靠  
现在就出现了我前面说的4个靠字的问题,从上面的实验,可以看到产生4靠的原因为:客户端与服务端的字符集不一致,所以解决这个问题的方法就是在客户端设置与服务端一致的字符集
11、现在把客户端的字符集改成与服务端一致的字符集
 
  1. C:\>SET NLS_LANG=ZHS16GBK 
12、然后登陆
 
  1. C:\>sqlplus / as sysdba  
  2.  
  3. SQL*Plus: Release 11.2.0.1.0 Production on 星期一 5月 21 15:13:11 2012  
  4.  
  5. Copyright (c) 1982, 2010, Oracle.  All rights reserved.  
  6.  
  7.  
  8. 连接到:  
  9. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production  
  10. With the Partitioning, OLAP, Data Mining and Real Application Testing options  
13、查看客户端与服务端的字符集
 
  1. SQL> select userenv('language') from dual;  
  2.  
  3. USERENV('LANGUAGE')  
  4. ----------------------------------------------------  
  5. SIMPLIFIED CHINESE_CHINA.ZHS16GBK  
  6.  
  7. SQL> select * from nls_database_parameters where parameter like '%CHARACTERSET%%';  
  8.  
  9. PARAMETER                VALUE  
  10. ---------------------------------------- ----------------------------------------  
  11. NLS_CHARACTERSET             ZHS16GBK  
  12. NLS_NCHAR_CHARACTERSET       AL16UTF16  
14、现在客户端与服务端的字符集都一致了,在查看一下dl_char里的内容
 
  1. SQL> select * from dl_char;  
  2.  
  3. NAME  
  4. --------------------  
  5. 字符集的乱码问题  
         现在显示为正常的、我之前输入的值了,4个靠字也没用在出现,所以提醒大家一下,以后在做exp/imp导出/导入或者客户端查询数据等操作的时候,一定要把客户端的字符集与服务端的字符集设置为同一个。

 本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/871323,如需转载请自行联系原作者



相关文章
|
Oracle 关系型数据库 Java
解决读取Oracle数据库US7ASCII编码乱码问题
今天和第三方对接数据时,对方提供了一个视图US7ASCII编码,给代码调试带来了很大的不便。程序输出的mybatis获取的对象及new String(s.getBytes("ISO8859-1"), "GB2312")加解密后都是乱码。
1416 1
|
存储 Oracle 关系型数据库
oracle blob和 varchar2互相转换,mybatis 读取blob乱码等相关问题总结
oracle blob和 varchar2互相转换,mybatis 读取blob乱码等相关问题总结
460 0
oracle blob和 varchar2互相转换,mybatis 读取blob乱码等相关问题总结
|
存储 Oracle 关系型数据库
Oracle字符乱码、数据越界访问典型Bug分析
前言: 作为乙方,在甲方客户那里验收阶段发现两个诡异Bug。以下就问题来源、问题根因、解决方案、如何避免做详细描述。
150 0
|
开发框架 Oracle Java
Oracle出现乱码的处理
在一次工作中碰到了乱码的笔记
|
Oracle 数据库 关系型数据库
Oracle字符乱码、数据越界访问典型Bug分析
作为乙方,在甲方客户那里验收阶段发现两个诡异Bug。以下就问题来源、问题根因、解决方案、如何避免做详细描述。
455 0
|
Oracle 关系型数据库 Windows
|
存储 Oracle 关系型数据库