Oracle数据库工具中文显示乱码问题的解决
ORACLE乱码问题解决

'UNKOWN'),
96,
DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),
一、修改oracle 字符集
由于Oracle 默认安装了SIMPLIFIED CHINESE_CHINA.WE8ISO8859P1字符集,不修改中文会出现乱码现象,输入如下命令:
[oracle@localhost ~]$sqlplus ‘/as sydba’
SQL>shutdown immediate
SQL>Startup restrict
SQL>select userenv('language') from dual;
SIMPLIFIED CHINESE_CHINA.WE8ISO8859P1
SQL>UPDATE sys.PROPS$ SET value$='ZHS16GBK' WHERE NAME='NLS_CHARACTERSET';
5.ALTER SYSTEM SET AQ_TM_PROCESSES=0;
6.ALTER DATABASE OPEN;
9.COL VALUE NEW_VALUE CHARSET
10.SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
1,
'VARCHAR2',
2,
'NVARCHAR2',
【IT专家】oracle数据库中文乱码的原因与解决

本文由我司收集整编,推荐下载,如有疑问,请与我司联系oracle数据库中文乱码的原因与解决2008/10/23 54423 资料: 很久以来,字符集一直是困扰着众多Oracle爱好者的问题,在此我们就这个问题做一些分析和探讨。
首先,我们要明确什么是字符集?字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包括关系,如us7ascii就是zhs16gbk的子集,从us7ascii到zhs16gbk不会有数据解释上的问题,不会有数据丢失,Oracle对这种问题也要求从子集到超集的导出受支持,反之不行。
在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。
其次,一旦数据库创建后,数据库的字符集是不能改变的。
因此,在设计和安装之初考虑使用哪一种字符集是十分重要的。
数据库字符集应该是操作系统本地字符集的一个超集。
存取数据库的客户使用的字符集将决定选择哪一个超集,即数据库字符集应该是所有客户字符集的超集。
在实际应用中,和字符集问题关系最大的恐怕就是exp/imp了。
在做exp/imp时,如果Client 和Server的nls_lang设置是一样的,一般就没有问题的。
但是,要在两个不同字符集的系统之间导数据就经常会有这样或那样的问题,如,导出时数据库的显示正常,是中文,当导入到其他系统时,就成了乱码,这也是一类常见问题。
现在,介绍一些与字符集有关的NLS_LANG参数,NLS_LANG格式:NLS_LANG = language_territory.charset 有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。
其中:language 指定服务器消息的语言。
territory 指定服务器的日期和数字格式。
charset 指定字符集例如:AMERICAN_7SCII AMERICAN _ AMERICA. ZHS16GBK 还有一些子集可以更明确定义NLS_LANG参数:DICT.BASE 数据字典基本表版本DBTIMEZONE 数据库时区NLS_LANGUAGE 语言NLS_TERRITORY 地域NLS_CURRENCY 本地货币字符NLS_ISO_CURRENCY ISO货币字符NLS_NUMERIC_CHARACTERS 小数字符和组分隔开NLS_CHARACTERSET 字符集NLS_CALENDAR 日历系统NLS_DATE_FORMAT 缺省的日期格式NLS_DATE_LANGUAGE 缺省的日期语。
数据库出现乱码的原因和解决办法

数据库出现乱码的原因和解决办法数据库出现乱码的原因和解决办法“在SQL*Plus中insert进的都是中文的,为什么一存入服务器后,再select出的就是”“有的时候,服务器数据先导出,重装服务器,再导入数据,结果,发生数据查询成”……这些问题,一般,是因为字符集设置不对照成的。
很久以来,字符集一直是困扰着众多Oracle爱好者的问题,笔者从事Oracle数据库管理和应用已经几年了,经常接到客户的类似上面提到的有关数据库字符集的“告急”和“求救”,今天,就这个问题打算做一些分析和探讨。
首先,我们要明确什么是字符集?字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包括关系,如us7ascii就是zhs16gbk 的子集,从us7ascii到zhs16gbk不会有数据解释上的问题,不会有数据丢失,oracle对这种问题也要求从子集到超集的导出受支持,反之不行。
在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。
其次,一旦数据库创建后,数据库的字符集是不能改变的。
因此,在设计和安装之初考虑使用哪一种字符集是十分重要的。
数据库字符集应该是操作系统本地字符集的一个超集。
存取数据库的客户使用的字符集将决定选择哪一个超集,即数据库字符集应该是所有客户字符集的超集。
在实际的应用中,和字符集问题最相关的恐怕就是exp/imp了。
在做exp/imp是,如果client 和server的nls_lang设置是一样的,一般就没有问题。
但是,要在两个不同字符集的系统之间导数据就经常会有这样那样的问题,如,导出时数据库的显示正常,是中文,当导入到其他系统时,就成了乱码,这也是一类常见问题。
对于这个问题,有一个常用的转换方法,首先用一个二进制编辑器(如,UltraEdit)察看到出文件(DMP文件)的第二和第三字节,这两个字节的内容是服务器端的字符集,比如0001,那么在数据库中查找出它代表的字符集:然后,如果在导入数据时需要修改为ZHS16GBK,我们就需要知道如何修改这两个字节才能让他们和ZHS16GBK对应:因此,可以将这两个字节手工修改为0354(不足4位时前面补0),然后就可以正常导入数据了。
Linux安装Oracle出现乱码怎么解决

Linux安装Oracle出现乱码怎么解决
Linux系统下Oracle经常会出现乱码,不管是安装还是使⽤过程中都会出现中⽂乱码。
这是因为Linux系统中缺少了某些字体,只要安装了这些字体,就能解决这个问题了。
解决办法⼀:
⽅法如下:
把中⽂字体放到Oracle安装包的 jdk/jre/lib/font/fallback下就可以了。
对于使⽤Oracle图形化⼯具时出现的乱码问题:
把中⽂字体复制到 ~/.font下,然后执⾏:
复制代码代码如下:
$ sudo mkfontscale
$ sudo mkfontdir
以上就是Linux安装使⽤Oracle出现乱码怎么办的全部内容了,Oracle中会⽤到jre等字体,如果没有这些字体就会出现中⽂乱码。
解决办法⼆:
exportNLS_LANG=AMERICAN_AMERICA.UTF8
export LC_ALL=C
oracle级别⽤户执⾏即可。
英⽂界⾯显⽰。
[oracle@ora database]$ export LANG=en_US
以后改回来⽐较⿇烦,有个⽐较帅的⽅案,经过测试可⽤使⽤。
解决Linux下Oracle10g数据库em,dbca中文方块乱码问题

解决Linux下Oracle10g数据库em,dbca中文方块乱码问题解决 Linux 下 Oracle 10g 数据库 em,dbca 中文方块乱码问题今天在 linux 下装了 oracle 10g 数据库,装好后将 Linux 系统语言切换为中文后,发现Oracle 的em(Enterprise Manager)、dbca(database configuration assistant)中文界面、按钮全为方块或乱码,十分让人头痛。
通过Google,百度查找原因,经过多次尝试,终于解决看到了em、dbca 界面看到了可爱的中文。
先介绍一下我的系统坏境:操作系统 Oracle 版本 $LANG $ORACLE_HOME Red Hat Enterprise Linux AS 5 10.1.0.3 (10g) zh_CN.UTF-8 /opt/oracle/product/10.1.0/Db_1/linux 系统 oracle 10g 数据库 em,dbca 中文方块乱码问题具体解决方法:一、安装简体中文字体包fonts-chinese-3.02-9.6.el5:我们首先得安装rhel5.0 系统DVD 中自带的中文字体包fonts-chinese-3.02-9.6.el5.noarch.rpm,这是至关重要的。
如果没有安装此字体包,简体中文字体文件/usr/share/fonts/zh_CN/TrueType/zysong.ttf 和/usr/share/fonts/chinese/TrueType/zysong.ttf 就不存在的,中文显示就更无从说起了。
二、设置Linux 系统语言坏境: 1. export LANG=zh_CN.UTF-8三、拷贝替换 font.properties 文件,执行下面两条命令: 1. 2.3. # cd $ORACLE_HOME/jre/1.4.2/lib/ # cp font.properties.zh_CN.Redhat8.0 font.properties //注:也可以用font.properties.zh_CN_UTF8.Redhat,font.properties.zh_CN.* 替换font. properties。
oracle中文乱码解决方法

oracle中文乱码解决方法oracle中文乱码解决方法1. Oracle数据库设置数据库参数NLS_LANG为使Oracle数据库中存储与显示中文时无乱码问题,可以更改Oracle数据库的数据库参数NLS_LANG,更改该参数为中文字符集,如:simplified Chinese_China.ZHS16GBK,此参数设置会对数据库中的所有字符数据有效。
2. Oracle数据库中多个字符集混用的解决方案一般系统及数据库常用的字符集可能存在多样性,例如全角字符、英文字母、空格等,而Oracle数据库支持了多个字符集,用户可以在数据库中多个字符集混合使用。
例如,用UTF8字符集对中文、英文、全角字符编码;用UTF16字符集对Unicode字符编码;用GBK/GB2312字符集对中文字符编码。
3. 注意SQL语句及字符集的指定为了防止运行SQL语句时出现乱码,应当在SQL语句中指定运行的字符集,如:ALTER SESSION SET NLS_LANGUAGE=AMERICAN_AMERICA.AL32UTF84. 客户端应用指定编码格式对于客户端应用,如sqlplus、PL/SQL开发工具,需要在连接之前指定客户端编码格式以确保传输与显示时无乱码问题,这种解决方案比较常用,在客户端应用中设置NLS_LANG参数,让客户端的中文字符使用Unicode,例如: NLS_LANG = SIMPLIFIED CHINESE_CHINA.UTF8 即可成功连接Oracle数据库解决乱码问题。
5. 数据导入导出中文处理从其他数据库导入Oracle数据库时,应从源数据库中查找出字段编码,在导入时将字段编码转换成Oracle数据库中的字符编码,可以增加数据库中文字符的正常显示。
从Oracle数据库导出数据至其他数据库,应将Oracle 数据库中的字符编码转换成目标数据库的编码方式,以保证导出数据无乱码状况。
6. 中文乱码的原因分析中文乱码的常见原因之一是程序的编码格式未正确设置,将GBK/GB2312等字符集与UTF-8 等Unicode字符集混用,也会出现中文乱码的情况。
解决Oracle 中文乱码

解决Oracle 中文乱码一、什么是oracle字符集Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。
ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。
它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
SELECT * FROM V$NLS_PARAMETERS1 NLS_LANGUAGE SIMPLIFIED CHINESE2 NLS_TERRITORY CHINA3 NLS_CURRENCY RMB4 NLS_ISO_CURRENCY CHINA5 NLS_NUMERIC_CHARACTERS .,6 NLS_CALENDAR GREGORIAN7 NLS_DATE_FORMAT DD-MON-RR8 NLS_DATE_LANGUAGE SIMPLIFIED CHINESE9 NLS_CHARACTERSET AL32UTF810 NLS_SORT BINARY11 NLS_TIME_FORMAT HH.MI.SSXFF AM12 NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM13 NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR14 NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR15 NLS_DUAL_CURRENCY RMB16 NLS_NCHAR_CHARACTERSET UTF817 NLS_COMP BINARY18 NLS_LENGTH_SEMANTICS BYTE19 NLS_NCHAR_CONV_EXCP FALSE二、如何查询Oracle的字符集ORACLE有三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。
解决suse安装oracle中文显示乱码

在Linux上安装过Oracle的时候汉字都是“口口”形乱码最初时间比较紧张只能用英文安装,后来经过反复试验和整理,现在可以完全解决linux下oracle中文乱码的问题,下面是整理后的文档:我想在linux 9 下也应该能够实现吧需要软件j2sdk-1_4_2_04-linux-i586.binjavacn.zip一.安装JDK在/tmp下建立一个临时的文件夹---------------------------------------------------[root@tooth root]# cd /tmp[root@tooth root]# mkdir javacn[root@tooth root]# cd javacn----------------------------------------------------将 j2sdk-1_4_2_02-linux-i586.bin并保存到/tmp/javacn给文件加上可执行的权限----------------------------------------------------[root@tooth root]# chmod 755 j2sdk-1_4_2_02-linux-i586.bin----------------------------------------------------执行文件安装JDK----------------------------------------------------[root@tooth root]# ./j2sdk-1_4_2_02-linux-i586.bin----------------------------------------------------......(一大堆的license的信息)询问是否同意,当然选yes----------------------------------------------------[root@tooth root]# mv j2sdk1.4.2_02 /usr/j2sdk----------------------------------------------------现在JDK还不能算安装完成了,还要设置一下环境变量:----------------------------------------------------[root@tooth root]# vi $HOME/.bash_profile在export PATH前加入下面一段JAVA_HOME=/usr/j2sdkexport JAVA_HOMEJRE=$JAVA_HOME/jreexport JREPATH=$JAVA_HOME/bin:$JRE/bin:$PATH----------------------------------------------------存盘退出,执行[root@tooth root]# source .bash_profile 这样设置的环境变量就生效了二.安装系统字体将附件文件解压到/tmp/javacn中,解压后的结果如下所示:----------------------------------------------------[root@tooth root]# cd /tmp[root@tooth root]# cd javacn[root@tooth javacn]# ls -l-----------------------------------------------------rw-r--r-- 1 root root 8102 1970-01-01 font.propertiesdrwxr-xr-x 9 root root 4096 6月 24 15:36 j2sdk1.4.2_02-rw-r--r-- 1 root root 12642204 1970-01-01 SimSun18030.ttc-rw-r--r-- 1 root root 10500352 1970-01-01 simsun.ttc-rw-r--r-- 1 root root 7764 1970-01-01 sm.sh-rw-r--r-- 1 root root 260472 1970-01-01 tahomabd.ttf-rw-r--r-- 1 root root 265528 1970-01-01 tahoma.ttf下面需要将$JRE/lib中的font.properties文件改名备份,并将/tmp/javacn 中的font.properties文件拷贝到$JRE/lib中----------------------------------------------------[root@tooth root]# cd $JRE[root@tooth jre]# cd lib[root@tooth lib]# mv font.properties font.properties.bak[root@tooth lib]# cp /tmp/javacn/font.properties ./----------------------------------------------------剩下的操作就是执行/tmp/javacn/sm.sh了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle数据库工具中文显示乱码问题的解决
Oracle客户端查询工具有时会有查处的结果为中文时不能正常显示,要么为乱码,要么为问号,plsql出现这种问题,以为是版本造成的,用了老的和最新的还是一样,换了另外的数据库工具也一样,但注意一点,数据其实是没有问题的,取出来显示是正常的中文,只是在工具里显示的是问号。
其实问题的原理很简单,就是字符集设置不正确造成的,但如此简单的原理在解决的过程中却会遇到很多麻烦,下面结合我遇到和解决的过程,给朋友们一点思路,说不定你们跟我的问题一样,通过这篇文章不用再折腾了,很快搞定,感觉飘飘……
首先讲讲字符集的知识,Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。
ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。
它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
影响oracle数据库字符集最重要的参数是NLS_LANG参数。
它的格式如下:
NLS_LANG = language_territory.charset
它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。
其中: Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。
如:AMERICAN _ AMERICA.
ZHS16GBK。
从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
如何查询Oracle的字符集,很多人都碰到过因为字符集不同而使数据导入失败的情况。
这涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。
在做数据导入的时候,需要这三个字符集都一致才能正确导入。
查询oracle server端的字符集,有很多种方法可以查出oracle server 端的字符集,比较直观的查询方法是以下这种:SQL>select userenv(‘language’) from dual;
结果类似如下:AMERICAN _ AMERICA. ZHS16GBK
对于查询工具结果集中的中文乱码,其实有两种情况供参考:
1.安装了服务器及配套工具,这样还出现乱码就去检查注册表中的NLS_LANG项是否设置正确,很有可能是在安装时设置了不正确的字符集造成的;
2.只安装了客户端,没有配套工具(如sqlplus等),以10g为例,注册表中是没有NLS_LANG这项的,那么要改哪?同理,还是要改字符集,不过不是在注册表中设,是要在环境变量中增加或修改,即查看windows系统环境变量是否存在NLS_LANG,若存在则修改,
若不存在新建,将值设为服务器端的字符集,服务器端的字符集可以通过上面的方法查询。
也可以硬性修改服务器端字符集但是不推荐,因为这可能会造成意想不到的问题。
修改server端字符集(不建议使用)。
在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。
但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。
正确的修改方法如下:
$sqlplus /nolog
SQL>conn / as sysdba;
若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
SQL>ALTER DATABASE national CHARACTER SET
ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
对于导入导出的数据文件,也存在字符集匹配的问题,否则不能正常显示。
修改dmp文件字符集
dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文
件的第2第3字节的内容就可以‘骗’过oracle的检查。
这样做理论上
也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如US7ASCII,
WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。
因为改的只是dmp文件,所以影响不大。
具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文
件的第2和第3个字节。
比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:
SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;
0354
然后将dmp文件的2、3字节修改为0354即可。
如果dmp文件很大,用ue无法打开,就需要用程序的方法了。
到这里,就算是把乱码的问题基本概述完了,大家可以参考自己的情况来修改,应该会解决的!。