Oracle字符集乱码问题解决方法

合集下载

ORACLE乱码问题解决

ORACLE乱码问题解决
'NCHAR VARYING',
'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',

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字符集混用,也会出现中文乱码的情况。

数据库出现乱码的原因和解决办法

数据库出现乱码的原因和解决办法

数据库出现乱码的原因和解决办法数据库出现乱码的原因和解决办法“在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经常会出现乱码,不管是安装还是使⽤过程中都会出现中⽂乱码。

这是因为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
以后改回来⽐较⿇烦,有个⽐较帅的⽅案,经过测试可⽤使⽤。

oracle导入出现字符集问题解决办法

oracle导入出现字符集问题解决办法

oracle导入出现字符集问题解决办法场景:把一台linux上的oracle库的数据捣腾到一台 windows2003上的oracle库中,在捣腾的过程中乱码了!有经验的知道多半是要改windows的注册表。

注册表打开发方式:Win98/98SE/Me运行中输入regedit.exe 无权限限制Win2000/XP1.开始>>运行.中输入regedt322.开始>>运行.中输入regedit第一种方法打开的注册表编辑器和Win98下的一样,而且功能相同,而使用第二种方法打开的注册表编辑器则可以方便的设置权限,建议网络管理员使用第2种方法打开注册表编辑器修改需要修改的权限设置部分以免被他人恶意修改。

Windows Vista/71.在开始菜单搜索框中输入regedit并按回车键.(需要管理员权限)2.在运行中输入regedit.exe(需要管理员权限)1. NLS_LANG 参数组成NLS_LANG参数由以下部分组成:NLS_LANG=<language>_<territory>.<client character set>Language:指定Oracle消息使用的语言,校验,日期中月份和日显示。

Territory:指定默认日期、数字、货币等格式,地区和计算星期及日期的习惯。

Client character set:控制客户端应用程序使用的字符集例如:NLS_LANG=AMERICAN_7ASCIIAMERICAN是语言,AMERICA是地区,US7ASCII是客户端字符集通常设置或者等于客户端(如Windows)代码页或者对于unicode应用设置为UTF8在Windows上查看当前系统的代码页可以使用chcp命令:E:\>chcp活动的代码页: 936代码页936也就是中文字符集 GBK,在Microsoft的官方站点上,我们可以遭到关于936代码页的具体编码规则,请参考以下链接:/globaldev/reference/dbcs/936.htm2. 查看 NLS_LANG 的方法Windows使用:注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG查看Unix使用:env|grep NLS_LANG如:/opt/oracle>env|grep NLS_LANGNLS_LANG=AMERICAN_CHINA.ZHS16GBKWindows客户端设置,可以在注册表中更改NLS_LANG,具体键值位于:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\xx指存在多个ORACLE_HOME时系统编号。

解决Oracle 中文乱码

解决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文件的字符集。

linux安装oracle10G 11G 乱码三种解决方法

linux安装oracle10G 11G 乱码三种解决方法
********方法一、使用汉语言安装oracle***************************************
1、在Linux系统中找到/usr/share/fonts/zh_CN/TrueType目录
2、若/usr/share/fonts目录下无zh_CN/TrueType目录,请使用以下脚本创建
4、将zysong.ttf字体拖至/jdk/jre/lib/fonts/或/filegroup2.jar文件中即可。
5、重新安装oracle,乱码问题解决。 Байду номын сангаас
********方法三、使用English安装oracle*****************************************
mkdir -p /usr/share/fonts/zh_CN/TrueType
3、下载zysong.ttf字体,上传到/usr/share/fonts/zh_CN/TrueType目录下
4、重新安装oracle,乱码问题解决。
********方法二、使用汉语言安装oracle*****************************************
1、在oracle解压包中找到/u01/database/stage/Components/oracle.jdk/1.5.0.51.10/1/DataFiles目录找到all.jar或filegroup2.jar
2、用归档管理器打开all.jar或filegroup2.jar
3、下载zysong.ttf字体,上传到/u01/database/stage/Components/oracle.jdk/1.5.0.51.10/1/DataFiles目录下

Linux下Oracle_sqlplus中文显示乱码问题的解决

Linux下Oracle_sqlplus中文显示乱码问题的解决

问题:在Windows下sqlplus完全正常,可是到Linux下,sqlplus中文显示就出问题了,总是显示“??”。

解决方法:在/home/oracle/.bash_profile或/etc/profile中设置:export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"oracle字符集的查询:A、oracle server 端字符集查询select userenv('language') from dual;select * from V$NLS_PARAMETERS;其中NLS_CHARACTERSET 为server端字符集NLS_LANGUAGE 为server端字符显示形式B、查询oracle client端的字符集echo $NLS_LANG原因分析:对用户反映情况的分析,发现字符集的设置不当是影响ORACLE数据库汉字显示的关键问题。

那么字符集是怎么一会事呢?字符集是ORACLE 为适应不同语言文字显示而设定的。

用于汉字显示的字符集主要有ZHS16CGB231280,US7ASCII,WE8ISO8859P1等。

字符集不仅需在服务器端存在,而且客户端也必须有字符集注册。

服务器端字符集是在安装ORACLE时指定的,字符集登记信息存储在ORACLE数据库字典的V$NLS_PARAMETERS表中;客户端字符集分两种情况,一种情况是sql*net 2.0以下版本,字符集是在windows的系统目录下的oracle.ini文件中登记的;另一种情况是sql*net 2.0以上(即32位)版本,字符集是在windows的系统注册表中登记的。

要在客户端正确显示ORACLE 数据库汉字信息,首先必须使服务器端的字符集与客户端的字符集一致;其次是加载到ORACLE数据库的数据字符集必须与服务器指定字符集一致。

因此,把用户存在的问题归纳分类,产生汉字显示异常的原因大致有以下几种:1.出现问题的原因1.1服务器指定字符集与客户字符集不同,而与加载数据字符集一致这种情况是最常见的,只要把客户端的字符集设置正确即可,解决办法见2.1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle汉字乱码问题原因及解决方法
目录
问题现象 (1)
问题原因 (1)
解决办法 (3)
问题现象
在开发项目中一直使用的是PostgreSQL,安装方便使用与oracle类似,但是由于性能相比较Oracle还是会差不少,所以一些数据量比较大的项目还是会用到Oracle数据库,但是在安装数据库以后发现中文数据在数据库中会产生乱码,使用PlSql查询依然也是乱码。

如下图所示:
问题原因
Oracle中出现中文乱码的主要原因是字符集不同。

Oracle中对于字符集来说我们关心三个地方的字符集:
● Oracle服务器内部的字符集
● NLS_LANG变量里保存的字符集
● 客户端应用的字符集
Oracle服务器内部的字符集
Oracle服务器内部的字符集是Oracle数据库存储数据使用的字符集,可以使用如下的查询语句查询
Select userenv('language') from dual;
或者:
Select name, value$ from props$;
NLS_LANG变量里保存的字符集
NLS_LANG这个是Oracle设置的一个变量,在Windows中,这个变量保存在注册表中:
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0保存着NLS_LANG变量。

在Unix/Linux中,则需要自己进行设置了。

可以在.profile里面加上
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG
客户端应用的字符集
Oracle客户端使用比较多的是PLSQL Developer 当然目前plsql客户端还不能很好的支持64为的Oracle 当然可以下载Oracle官方的客户端再通过关联可以使用plsql连接上64位的Oracle数据库,这与本文主题略有偏离便不详细描述了。

如果 Oracle服务器内部的字符集和 NLS_LANG变量里保存的字符集相同,在进行Oracle查询时,就会将Oracle中的数据直接查出来,返回给查询用户。

进行Oracle的插入操作,就会直接将插入的数据保存进数据库中。

但是如果不同的话,Oracle查询时,会根据这两个字符集的一个映射,将数据库中的数据作一个转换,再返回给查询用户。

进行插入操作时,也会根据映射,将插入的数据作一个转换,再插入数据库。

这也是产生乱码的原因,这一层转换,把数据都给转乱了。

解决办法
通过上述分析,我们只需要将数据库的字符集和NLS_LANG字符集设置的一样,就可以避免乱码的出现了,当然在Oracle中支持中文需要将数据库字符集修改成:ZHS16GBK即可。

修改数据库字符集的步骤如下:
1、拥有修改权限(用管理用户登录)。

SQL>conn sys/sys as sysdba;
2、关闭数据库。

SQL>shutdown immediate;
3、启动数据库到Mount状态下。

SQL>STARTUP MOUNT;
ORACLE instance started.
Total System Global Area 76619308 bytes
Fixed Size 454188 bytes
Variable Size 58720256 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL>ALTER SESSION SET SQL_TRACE=TRUE;
Session altered.
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered.
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
System altered.
4、启动数据库
SQL>Alter database open;
5、修改字符集
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
注:(如果修改失败,则可能是如下原因引起的)
1. 如果数据库表中有CLOB类型的列,是不允许修改字符集的,解决方法为,
先导出这个表的内容,然后删除这个表,修改完后,再导入这个表的内容就可以了。

2. 旧的字符集必须是新的字符集的子集,否则不能修改。

修改完后,可以查看一下修改是否成功。

6、关闭数据库
SQL>Shutdown immediate;
7、重新启动数据库
SQL>startup;
经过设置完Oracle字符集后,一般的乱码问题应该解决掉了。

相关文档
最新文档