APP下载

ORACLE数据库字符集问题及解决方法

2017-04-25赵丹妮辽宁锦州渤海大学信息科学与技术学院

数码世界 2017年4期
关键词:服务器端字节客户端

赵丹妮 辽宁锦州渤海大学信息科学与技术学院

ORACLE数据库字符集问题及解决方法

赵丹妮 辽宁锦州渤海大学信息科学与技术学院

当将数据导入以及导出到数据库里面的过程中,数据要与存储的数据保持一致性,这是一个需要引起重视的问题,数据的一致性与设置字符集有着直接的联系。本文主要是先围绕着转化字符集的机理展开,联系具体的现实中所存在的具体问题,着重对ORACLE数据库字符集存在的问题进行了分析,并且针对相关的问题提出了解决对策。

ORACLE 字符集 解决

作为现今数据库平台中最为流行的数据库,在实际的工作运用中,Oracle经常由于字符集的因素从而造成数据库里面的汉字信息在转换的过程中产生乱码,甚至于直接导致数据在迁移的过程中导致失败等问题,这些问题对于用户而言,是一个很大的困扰因素。所以针对这些数据字符集的问题,本文提出了相应的解决对策。

1 问题的提出

ORACLE数据库在工厂的管理中起到了很大的作用,工厂数据的处理离不开数据库。然而因为设置数据库字符集的时候都不一样,所以常常在具体的工作应用中常常会碰到当数据从数据库服务器中导出的时候,显示出的是乱码,造成了很多的汉字很难辨认,这对于数据的读写都是一个很大的问题,另外因为工厂的需求,需要对数据进行迁移的时候,出现了迁移失败等问题。这两种数据库问题是比较常见的。本文主要是讨论了这两种问题的解决对策。

2 Oracle数据库的字符集问题

为了满足多种语言文字的需求,Oracle数据库因此实现了字符集的设置。字符集的存在之处除了服务器端之外,还可以在客户端中存在,同时客户端中的字符集一定实现注册。如果想要将Oracl数据库中的相关汉字信息成功显示在客户端,那么就一定要保持客户端的字符集和服务器端字符集是完全一致的;此外如果字符集是不相同的时候,那么在数据迁移,完成字符集转换的过程中,就很容易出现重要数据的缺失,最终造成了数据库在导入,导出数据的时候出现错误,最终失败。

数据迁移的过程中,会经常用到Oracle的Import/emport工具,该工具可以实现数据的转化以及数据的迁移,该工具可以跨平台,因此数据迁移的过程中,应用十分广泛。数据导出/导入的时候常常会用到下面的字符集:①源数据库字符集;②目标字符集;③导入/导出过程中用户会话字符集。

3 ORACLE字符集的转换原理

为了能够适应多种文字语言的显示问题,ORACLE数据库中实现了字符集设定。客户端以及服务器端都需要注册字符集,当服务器端和客户端的字符集是保持一致的时候,ORACLE数据库才可以确保客户端中的数据是完全正常显示的。倘若字符集不是一样的时候,那么在进行数据库的操作过程中很可能出现数据显示乱码的现象。当字符集不一致,数据库的迁移中字符集的转换,数据容易出现丢失的情况,而且数据的导入导出也会出现问题。

4 查询ORACLE数据库字符集参数

4.1 查询ORACLE服务端的字符集

查询的对象ORACLE服务端中的字符集,可以选择很多种方式,通常选择直观的方法有以下几种:

显示的结果为:NEWZLAND_NEWZLANDZHS15GBK

4.2 查询dmp文件中字符集

当运用exp工具的时候就会导出dmp文件,dmp文件中会将字符集的相关信息表现出来,对dmp文件进行分析,第2个或者第3个字节处显示的是字符集。当dmp文件是在几十M以下的时候,能够选择16进制的UltraEdit查看这个dmp文件,对第2、第3字节中的信息进行分析,比如0336,该字节中的信息可以通过sql语句进行查询,sql语句如下:

得出的显示结果是ZHS18GBK。

然而大多数时候,dmp文件一般都是比较大的,有的甚至在2G以上,倘若依然是选择上面的方法进行字符信息的查询以及打开的话,显然是不太适用的,有时会出现打不开文件的尴尬局面,有时即使打开了也是十分缓慢,这个时候查询的方式可以是:cat exps. dmp |ods -x|head -1|awks ‘{prints $2 $3}’|cut -c 3-6,同时也可以根据sql语句查询字符集。

5 ORACLE数据库字符集问题的解决

对于ORACLE数据库而言,许多的字符集彼此间是相互包容的联系,例如US7ASCII和ZHSI6CBK,前者是为后者的子集,从前者到后者的这个字符集转化的过程中,解释数据的过程不会出现数据缺失的情况。同时ORACLE数据库,转换字符集操作有时是不可逆的,例如将子集向超集转换的过程是可以实现的,但是反过来四不可以的。

5.1 客户端字符集和服务器指定字符集不一致,但和加载数据字符集一致

一般情况下在创建数据的时候字符集通就确定了,当用户的数据是存储下来以后,数据就无法进行修改了,由于数据库中的数据方式是字符集的形式,当变为其他的字符集后,之前的数据就无法正常显示了。所以根据所查看到的服务器端中的字符集,设置客户端。其中有2种配置的方法:

①当Oracle客户端软件安装的时候指定。②根据对客户端的操作系统中的注册表进行修改,处于WINDOWS平台下,能够将注册表打开,修改注册表为:HKEY_LOCAL MACHINE ORACLEHOME中NLS_LANG值,从而实现统一服务器字符集于客户端。

5.2 客户端字符集和服务器指定字符集相一致,但是和加载数据字符集不同

当升级Oracle版本或者是进行系统安装的时候,这种问题就会出现,另外如果当选择的字符集和服务器端是不一致的,数据备份中仍然是选择的根据之前的字符集卸出。在这种情况下,无论客户端字符集与服务器端的是不是一致的,汉字都是不可能显示出来的。通常要解决这种问题采取的方法总结如下。

5.2.1 将Oracle安装在服务器端

当安装的时候需要保证数据库中的字符集和之前所卸出的字符集是一致的。这种情况下通常要用在空库以及字符集是一致的情况下。

5.2.2 对服务器端进行强行地修改

当用imp命令对数据进行加载之前,需要先修改已有的Oracle数据库中的字符集,确保加载的数据字符集和服务器中的的字符集是完全一致的。该字符集转化方式比较简单,然而实用性不是很大,转化的场合是当新的字符集超过了原来的字符集的时候采用。解决方式如下:

选择二进制的工具进行编辑,例如uedi 32。将dmp文件打开,从而得到第2、3字节的信息,比如0012,先将0012向10进制转换,接着字符集获得时选择NLS_CHARSET__NAMES函数,sql语句如下:

接着将dmp文件里面的字符集进行修改为ZHSl5GBK,这个时候就用NLS—CHARSEl ID将这个字符集的编号进行获取,sql语句如下:

将第2、3字节中的0002变为0364,从而就实现了该dmp文件的字符集转化,这是个US7ASCII转化为ZHSl6GBK的过程,接着将dmp文件导入到ZHSl6GBK字符集的数据库就行了。

结语:深入了解Oracle转化字符集相关原理,能够给人们的实际工作减少很多不必要的麻烦,可以尽量防止数据的损失以及数据显示中出现乱码的局面,本文根据目前数据库字符集所存在的问题从而提出了对应的解决对策。

[1]Stefano Andreozzi,Anirikh Chakrabarti,Keng Cher Soh,Anthony Burgard,Tae Hoon Yang,Stephen Van Dien,Ljubisa Miskovic,Vassily Hatzimanikatis. Identification of metabolic engineering targets for the enhancement of 1,4-butanediol production in recombinant E. coli using largescale kinetic models[J]. Metabolic Engineering,2016

[2]Mingyue Jiang,Tsong Yueh Chen,Fei-Ching Kuo,Dave Towey,Zuohua Ding. A Metamorphic Testing Approach for Supporting Program Repair Without the Need for a Test Oracle[J]. The Journal of Systems & Software,2015

[3]Katherine Brunson,Xin Zhao,Nu He,Xiangming Dai,Antonia Rodrigues,Dongya Yang. New insights into the origins of oracle bone divination: Ancient DNA from Late Neolithic Chinese bovines[J]. Journal of Archaeological Science,2016

[4]郑晓江,孙雪华.ORACLE数据库字符集问题及其解决方法[C]//上海市电机工程学会、上海市电工技术学会2001年学术年会.2015

猜你喜欢

服务器端字节客户端
你的手机安装了多少个客户端
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
No.8 字节跳动将推出独立出口电商APP
Linux环境下基于Socket的数据传输软件设计
No.10 “字节跳动手机”要来了?
轻量级分组密码Midori64的积分攻击
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用
新华社推出新版客户端 打造移动互联新闻旗舰