- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ORACLE数据库字符集问题及解决的方法
ORACLE数据库字符集问题及解决的方法
摘 要 数据库中数据的导入,导出和存储数据的一致性是一个很关键的问题,字符集的设置与之密切相关。本文从字符集的转换机理入手,结合实际工作中遇到的问题,着重讨论了ORACLE中服务器和客户端字符集设置和数据读取出现的乱码问题。
关键词 ORACLE;字符集;数据导出;数据导入;NLS
中图分类号:TP311 文献标识码:A 文章编号:1671-7597(2014)24-0129-01
1 问题的提出
ORACLE数据库是目前我厂应用比较广泛的数据库平台之一,对我厂数据的科学高效化管理起到了重要的作用。但是由于数据库字符集设置不同,在工作当中会遇到从数据库服务器导出的数据显示为不可识别的乱码的情况,导致大量汉字信息无法使用,或者在数据迁移时出现数据损失或迁移失败,分析遇到的这两种情况,对运行过程中存在的具体字符集问题进行分析,探讨合理有效的解决方法,本文主要是对此方法进行阐述。
2 ORACLE字符集的转换机理分析
在要求不同语言和文字的显示的情况下,ORACLE数据库进行了字符集的设定。字符集的注册必须同时存在于服务器端和客户端,只有在客户端与服务器端有着统一的字符集的情况下,ORACLE数据库才能保证客户端显示正确;如果存在不一致的字符集,在操作数据库的过程中容易数显问题,迁移的过程中需要转换字符集,会出现数据损失,在进行导入和导出时就会出现失败的情况。
3 对ORACLE数据库的字符集参数进行查询
1)ORACLE SERVER端的字符集查询。
进行此种查询的方法很多,较为直观的方法主要有以下
几种:
SQLselect usereny(‘language’) from dual;
结果类似如下:
AMERICAN_AMERICA.ZHS16GBK
2)dmp文件的字符集查询。
dmp文件是使用exp工具进行ORACLE导出而获得,字符集信息也在dmp文件中体现,分析dmp文件,其字符集主要集中在第二、三个字节。在dmp文件小于几十M的情况下,可使用16进制方式的UltraEdit对此类小文件进行查看,分析第二、三字节的内容,如0354,其字符集对应的信息可使用SQL进行查询:
SQL select nls_charset_name(to_number(‘0354’,’xxxx’)) from dual;
ZHS16GBK
但是在很多情况下,dmp文件通常会很大,很多会超过2G,如果还是用以上方法对文件进行打开和查询,有可能打不开,能打开时速度也很慢,此时在UNIX主机可通过以下方式进行
查询:
cat exp.dmp |od -x|head -1|awk ‘{print $2 $3}’|cut -c 3-6
打开后同样可通过SQL对字符集的信息进行查询。
4 解决ORACLE数据库字符集问题探讨
在ORACLE数据库中,很多字符集之间的关系为相互包容,比如ZHSI6CBK和US7ASCII,后者为前者的子集,从后者到前者的转变过程中,数据解释过程会顺利进行而不存在数据的丢失。在ORACLE数据库中,字符集的转换不一定都为可逆,如从子集转换到超集可实现,而从超集到子集则无法实现。超集是当前字符集中的每一个字符在新字符集中都可以表示,并使用同样的代码点比如很多字符集都是US7ASCII的严格超集。当此两种字符集的关系不是超集和子集关系时,ORACLE数据库就不能支持字符集的转换。
修改数据库SERVER端错误的过程有可能发生很多意想不到的结果,这就会造成数据库无法正常运行,有鉴于此,在对错误进行修改之前要对其关系进行确认,明确两种子集的关系是否为超集和子集。需要特别指出的是,对于ZHS16CGB231280和ZHS16GBK字符集,两者之间的关系不是超集和子集关系,数据库不能支持两者之间的相互转换。
1)服务器字符集与加载数据字符集一致而不同于客户端字符集。
在创建ORACLE数据库时就确定了字符集,用户数据的存储是通过字符集的方式进行,在存储了以后就不会进行修改,如果进行修改是需要对字符集进行改换,此时就无法对数据进行正确显示。
设置客户端的字符集就需要对服务器端的字符集进行查询,在ORACLE数据库的支持下通过服务器端字符集来实现。配置方法有软件指定和注册表操作两种,软件指定是通过安装ORACLE客户端软件实现,操作注册表则是对客户端的操作系统进行注册表更改来实现,以ZHS16GBK的修改为例,如果是WINDOWS平台,可对注册表信息进行修改,对“HKEYLOCALMACHINE\SOFTWARE\ORACLE\H
原创力文档


文档评论(0)