Oracle 8i字符集乱码问题析及其解决办法

正在看的ORACLE教程是:Oracle 8i字符集乱码问题析及其解决办法。一、问题描述

  SQL Plus WorkSheet是一个窗口图形界面的SQL语句编辑器,对于那些喜欢窗口界面而不喜欢字符界面的用户,该工具相对SQL/PLUS受到了很大的欢迎。但从Oracle 8i以后,如果安装Oracle 8i时选取的是别于英语的字符集,对于我们中国,通常会选取简体中文字符集(ZHS16GBK),安装成功后,运行SQL Plus WorkSheet程序,会出现所有的中文显示以及查询结果均为乱码的情况。

  二、问题分析

  最初出现该问题,首先怀疑就是安装时字符集设置有问题,也就是说没有设置正确的简体中文字符集。首先检查数据库字符集,在SQL/PLUS中,运行下面的SQL语句,检查所连接数据库的字符集:

  查询结果发现数据库安装时所选字符集为简体中文ZHS16GBK,说明安装时字符集设置完全正确。第二步开始怀疑是用户客户端字符集问题,检查客户端注册表,打开注册表编辑程序(RegEdit),在HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG,发现Oracle客户端字符集为AMERICAN_AMERICA.ZHS16GBK,设置也完全正确,可以排除是客户端字符集设置错误的问题。同时还有一个现象就是在同一个客户端机器上SQL/PLUS中的查询字符集显示完全正常,这也说明不是字符集设置问题,而是系统程序SQL/Plus Worksheet的问题。

  在Oracle 8i以前的版本中,从来没有出现过这样的情况,这应该和Oracle版本有关,我们知道Oracle 8i和它前面的版本一个显著的区别就是大部分的Oracle系统程序,现在均采用Java驱动,其实这也就是产生字符集乱码问题的根本所在。非Java驱动的程序,如SQL*Plus,有一个系统参数NLS_LANG,该参数在UNIX系统中设置在环境变量中,在Windows操作系统中设置在注册表中,这个参数决定了客户端应用程序的字符集。而对于基于Java应用的程序,如现在遇到的SQL*PLus Worksheet,NLS_LANG参数对这类程序是不起任何作用的。

  三、解决方案

  找到了问题产生的原因后,下面来讨论如何解决该问题。对于Oracle Enterprise Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,

  去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。

  对于Windows操作系统,还需要修改一项,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为 SQLPLUS_SYSTEMROOT=d:\\WINNT。

  对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。如果在Windows操作系统中不修改该项,在Oracle Enterprise Manager中,连接系统时,会提示如下的错误:

  或者

  修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。

(0)

相关推荐

  • oracle客户端PLSQL连接失败解决方法

    上周博客中写了oracle客户端连接服务器的文章,解决了在自己本本上安装的烦恼. 原来自己的电脑与服务器在一个局域网,所以每次都是远程服务器,但是远程也不是解决的办法哈,因为多个人使用同一个服务器,所以使用极其不方便,在自己本本上安装,又比较卡.因此才出现上边博客.嘻嘻,题外话.言归正传. 从家回来,继续我那工作,打开oracle客户端PLSQL,呀,突然连接不上了. 咦,这是怎么回事呢,前几天运转正常哩,回家三四天,咋成这样了呢? 遇到问题,冷静分析其错误,从错误中,可以得知,目标主机,也就是

  • oracle中文乱码的解决方法

    解决办法:修改oracle用户的环境变量 文件.加入NLS_LANG="SIMPLIFIED CHINESE_CHINA.al32utf8"; export NLS_LANG 复制代码 代码如下: [oracle@rhel6r4 ~]$ vi .bash_profile # .bash_profile# Get the aliases and functionsif [ -f ~/.bashrc ]; then. ~/.bashrcfi# User specific environme

  • oracle em 按钮乱码解决办法及em网页变成英文

    一.oracle em中按钮乱码解决办法: 1.修改jdk 下面的字体. 复制代码 代码如下: [oracle@esop db_1]$ cd $ORACLE_HOME/jdk/jre/lib/ [oracle@esop lib]$ mv font.properties font.properties_bak [oracle@esop lib]$ cp font.properties.zh_CN.Redhat font.properties 2.修改jre 下面的字体 复制代码 代码如下: [or

  • plsql连接oracle数据库报ora 12154错误解决方法

    plsql连接oracle数据库报ora 12154错误 今天遇到一个问题,使用sqlplus能够连接到远程的数据库,但是使用plsql却连接不上,报错"ORA-12154: TNS: 无法解析指定的连接标识符" 解决方法如下: 1.先检查服务器端的监听服务是否打开,如果没有打开请启动其监听 客户端:tnsping <tns_name> 服务器Linux下: #>lsnrctl status 查看监听状态 #>lsnrctl start 启动监听 2.通过Sql

  • oracle安装出现乱码等相关问题

    安装oracle时候遇到错误 Preparing to launch Oracle Universal Installer from /tmp/OraInstall2011-11-03_12-53-01PM. Please wait ...[oracle@localhost database]$ Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/OraInstall2011-11-03_12-53-01PM/

  • Oracle客户端与plsql查询数据乱码修改成中文的快速解决方法

    1.查询ORACLE服务器的语言.地域和字符集 select * from nls_database_paameters; 查询结果如下图, NLS_LANGUAGE 表示"语言",NLS_TERRITORY 表示"地域",NLS_CHARACTSET 表示"字符集",将他们三个按照"语言_地域.字符集"的格式拼接起来,就有了"AMERICAN_AMERICA.ZHS16GBK". 下面正式的来操作: 2.

  • oracle中文乱码解决的办法

    服务器为windows server 2003,正常安装完oracle客户端后,插入数据时,发现中文都是?. 异常: PLL/SQL中输入select userenv('LANGUAGE') From Dual,结果为AMERICAN_AMERICA.US7ASCII, 注册表中[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home]下的NLS_LANG为SIMPLIFIED CHINESE_CHINA.ZHS16GBK. 解决方法:

  • oracle(plsql)生成流水号

    复制代码 代码如下: CREATE OR REPLACE FUNCTION fn_no_make(v_prefix     VARCHAR2,                                      v_table_name VARCHAR2,                                      v_number_col VARCHAR2) /*  * v_prefix:     编码前缀两位  * v_table_name:编码所在表名  * v_num

  • 使用工具 plsqldev将Excel导入Oracle数据库

    1.使用工具 plsqldev 2.打开需导入的excel表格,单击office按钮,选择另存为--其他格式, 选择保存类型CSV(逗号分隔)(*.csv),单击保存 3.打开plsqldev 在工具栏中选择Tools下拉菜单下的Text Importer.进入后选择data from textfile标签.单击下面带有红线框的按钮 打开csv文件. 如果打开成功,再选择"data to oracle"标签 选择owner和table 并在fields框中选择相应的列 然后在右边的下拉

  • Oracle 8i字符集乱码问题析及其解决办法

    正在看的ORACLE教程是:Oracle 8i字符集乱码问题析及其解决办法.一.问题描述 SQL Plus WorkSheet是一个窗口图形界面的SQL语句编辑器,对于那些喜欢窗口界面而不喜欢字符界面的用户,该工具相对SQL/PLUS受到了很大的欢迎.但从Oracle 8i以后,如果安装Oracle 8i时选取的是别于英语的字符集,对于我们中国,通常会选取简体中文字符集(ZHS16GBK),安装成功后,运行SQL Plus WorkSheet程序,会出现所有的中文显示以及查询结果均为乱码的情况.

  • mysql数据库中字符集乱码问题原因及解决

    前言 有的时候我们在查看数据库数据时,会看到乱码.实际上,无论何种数据库只要出现乱码问题,这大多是由于数据库字符集设定的问题. 下面我们就介绍一下,数据库的字符集的设定及乱码问题的解决. mysql数据库的字符集 直白的说,字符就像是单个的文字,编码就像是给每个文字的编号,字符集就像是字符与编码的集合,校验规则就是字符集的对应的排序规则,字符集加上对应的校验规则就是语言.(每种字符集可以有多种校对规则,但都有一个默认的校对规则) mysql数据库可以通过设定字符集,来使用对应的字符集和检验规则来

  • Oracle表空间不足的两种解决办法

    首先查询表空间的大小以及文件路径地址 select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name; 解决方案一 //修改表空间大小(32000可改为想要的数值) alter database datafile '要修改的数据文件地址' resize 32000m; 解决方案二 //新增数据文件 ALTER

  • Oracle用户被锁的原因及解决办法

    在登陆时被告知test用户被锁 1.用dba角色的用户登陆,进行解锁,先设置具体时间格式,以便查看具体时间 SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; Session altered. 2.查看具体的被锁时间 SQL> select username,lock_date from dba_users where username='TEST'; USERNAME LOCK_DATE TEST 2009-03-1

  • JQuery 传送中文乱码问题的简单解决办法

    一.客户端先进行编码,服务端再解码. 客户端发送数据: var names = encodeURIComponent("电费"); names = encodeURIComponent( names); $.post("test.do?names="+name,null, function(){}); 服务端解码: 获取names 参数值,然后解码. String name = URLDecoder.decode(names, "UTF-8");

  • Oracle函数使索引列失效的解决办法

    在索引列上使用函数使得索引失效的是常见的索引失效原因之一,因此尽可能的避免在索引列上使用函数.尽管可以使用基于函数的索引来解决索引失效的问题,但如此一来带来的比如磁盘空间的占用以及列上过多的索引导致DML性能的下降.本文描述的是一个索引列上使用函数使其失效的案例. 一.数据版本与原始语句及相关信息 1.版本信息 SQL> select * from v$version; BANNER --------------------------------------------------------

  • Oracle报错:ORA-28001:口令已失效解决办法

    目录 一.链接Oracle报错 :ORA-28001:口令已失效 二.查看数据库密码默认有效期: 三.解决方式一:修改用户密码 四.解决方式二:修改默认有效期 总结 一.链接Oracle报错 :ORA-28001:口令已失效 解决办法  原因:Oracle11G创建用户时缺省密码过期限制是180天(即6个月), 如果超过180天用户密码未做修改则该用户无法登录 解决方式: 方式一: 在密码将要过期或已经过期时进行修改密码,密码修改后该用户可正常连接数据库 方式二: 将口令有效期默认值180天修改

  • php和mysql中uft-8中文编码乱码的几种解决办法

    PHP页面转UTF-8编码问题 1.在代码开始出加入一行: 复制代码 代码如下: header("Content-Type: text/html;charset=utf-8"); 2.PHP文件编码问题 点击编辑器的菜单:"文件"->"另存为",可以看到当前文件的编码,确保文件编码为:UTF-8, 如果是ANSI,需要将编码改成:UTF-8. 3.PHP文件头BOM问题: PHP文件一定不可以有BOM标签 否则,会出现session不能使用

  • CodeIgniter输出中文乱码的两种解决办法

    在controller直接echo的时候,某些浏览器会出现乱码的情况.可以用下面两种方法解决: 1.常用的php的header函数 复制代码 代码如下: header("Content-type:text/html;charset=utf-8"); 示例: 复制代码 代码如下: <?phpclass home extends CI_Controller { function index() { //设置编码 header("Content-type:text/html;

  • thinkphp中连接oracle时封装方法无法用的解决办法

    最近收集了一些关于THinkPHP连接Oracle数据库的问题,有很多朋友按照连接mysql的方法来操作,导致有一些方法在Oreale中无法正常使用.比如说:findAll,Select方法无法使用,获取不到需要的数据.Create和add方法无法创建和写入数据到数据库中. 其实根据以前问题我做了几天调试,找到了问题所在,并成功在我自己一个小项目练习中使用正常,那么现在就将我的经验分享给大家. 1,数据库的连接及配置文件的内容我就不说了, 上面已经做了解释.我这里只根据一个数据表的例子来说明我的

随机推荐