约瑟夫问题c语言 Oracle多语言安装问题.docx

上传人:b****8 文档编号:29809359 上传时间:2023-07-27 格式:DOCX 页数:8 大小:19.76KB
下载 相关 举报
约瑟夫问题c语言 Oracle多语言安装问题.docx_第1页
第1页 / 共8页
约瑟夫问题c语言 Oracle多语言安装问题.docx_第2页
第2页 / 共8页
约瑟夫问题c语言 Oracle多语言安装问题.docx_第3页
第3页 / 共8页
约瑟夫问题c语言 Oracle多语言安装问题.docx_第4页
第4页 / 共8页
约瑟夫问题c语言 Oracle多语言安装问题.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

约瑟夫问题c语言 Oracle多语言安装问题.docx

《约瑟夫问题c语言 Oracle多语言安装问题.docx》由会员分享,可在线阅读,更多相关《约瑟夫问题c语言 Oracle多语言安装问题.docx(8页珍藏版)》请在冰豆网上搜索。

约瑟夫问题c语言 Oracle多语言安装问题.docx

约瑟夫问题c语言Oracle多语言安装问题

约瑟夫问题c语言Oracle多语言安装问题

导读:

就爱阅读网友为您分享以下“Oracle多语言安装问题”资讯,希望对您有所帮助,感谢您对的支持!

中国科技论文在线

Oracle数据库多语言入库问题的解决方案

杨毅峰1,邹仕洪1,林宇2,刘苑琦2

1北京邮电大学网络与交换技术国家重点实验室,北京(100876)

2北京网秦天下科技有限公司,北京(100013)

E-mail:

摘要:

本文通过研究Oracle数据库如何成功实现多语言入库,给出了一种实现多国语言信息存储的基本方法,该方法解决了非中文语言入库时出现的乱码问题。

随着企业在发展过程中业务的国际化,业务信息的存储也从单一的本国语言发展成多国语言共存的局面。

Oracle数据库作为国际化的数据库平台展现出了强大的全球化技术优势。

在使用Oracle存储多国语言信息的过程中难免遇到由于字符集的不兼容而导致无法正确存储数据的问题,例如泰文、韩文、阿拉伯文等在默认字符集为ZHS16GBK,国家字符集为AL16UTF16的数据库的入库需要特殊的方法。

关键词:

ORACLE9I,泰文入库,多国语言存储,数据库乱码

中图分类号:

TP311

1.引言

2009年根据IDC报告显示Oracle在软件市场上位居第三,其数据库在全球中的影响以及使用都是十分广泛的,其全球化的基础是Oracle数据库字符集,即Oracle全球化支持(GlobalizationSupport),Oracle可以支持多种语言及字符集,Oracle9i支持57种语言、88个国家地域、235种字符集[1]。

由于Oracle字符集种类多,且在存储、检索、迁移Oracle数据时多个环节与字符集的设置密切相关,而且由于业务的国际化,需要多种语言共存,在实际的应用中,数据库开发和管理人员经常会遇到有关Oracle字符集方面的问题。

笔者通过对网上资源的搜索,有的文章或者博客中给出了建议,但是并没有发现有小语种语言入库的良好解决方案。

经过笔者的研究和实践,终于解决一个实际的问题——泰语等入库。

该方案通过使用Oracle的sqlloader方法,通过具体的环境设置成功实现了多国语言入库。

2.字符集

字符(Character)是文字与符号的总称,包括文字、图形符号、数学符号等。

一组抽象字符的集合就是字符集(Charset)。

字符集(也称字元集,CharacterSet)就是字符编码表(codepage),一个字符不论英文、中文、韩文、泰文、日文等任何语言,他们在计算机系统内存或硬盘中通过二进制的字节(Byte)保存,这个二进制的编码就是字符编码(也称内码),字符集就是字符与内码的对应(映射)表[2]。

各个国家语言的差异,使得字符集本国化。

使用最广泛的ASCII编码,由美国国家标准局(即ANSI)制定,适用于所有拉丁、英文字符。

中国大陆使用GB2312,GBK,GB18030等字符集,这些字符集包含所有汉字字符的内码,其中GBK,GB18030称为大字符集,对繁体中文也进行了编码。

香港、台湾、澳门地区使用Big5编码,Big5收录了繁体中文(有些繁体与中国大陆繁体字符有差异)的编码,不包含简体中文的字符编码。

泰文使用ISO8859-1的字符集[3]。

其他如日文、俄文等都有自己国家制定的字符集,用来保证计算机系统能正确-1-

中国科技论文在线显示本国的语言文字。

不同语言的字符集不具有通用性,ASCII字符集没有制定中文字符的编码,GB2312没有制定泰文字符的编码,Big5没有制定简体中文字符的编码,针对这种不兼容性,官方发布了Unicode(进一步优化的UTF7,UTF8,UTF16等)字符集,对每一种语言的每个字符制定了统一且唯一的内码,满足跨语言、跨平台的字符解码和转换处理。

3.Oracle字符集

由于不同国家语言的编码不一致,因此Oracle数据库内提供对两种字符集的支持——默认字符集和国家字符集。

其中,默认字符集提供了对CHAR、VARCHAR、VARCHAR2、CLOB等的支持,比如;而国家字符集在提供了对NCHAR、NVARCHAR、NVARCHAR2、NCLOB等的支持。

本文使用的数据库中,默认字符集为ZHS16GBK,国家字符集为AL16UTF16。

也就是说对于所有定义为CHAR、VARCHAR、VARCHAR2、CLOB等默认类型的字段,字符集为ZHS16GBK,对于定义为NCHAR、NVARCHAR、NVARCHAR2、NCLOB等类型的字段,字符集为AL16UTF16。

Oracle字符集包括两部分。

一部分是Server端数据库运行实例(instance)的字符集,一部分是Oracle客户端Client的字符集。

3.1Server端字符集

图1oracle服务端安装字符集配置截图

安装Oracle数据库过程中,需要选择数据库字符集。

默认的是OS系统的字符集,简体中文系统是GB2312,繁体系统是BIG5。

Oracle对于简体系统的字符集使用ZHS16GBK[4]。

此外,选择Unicode作为数据库字符集,所有存储数据都将以Unicode编码存储在数据库中,不论字段类型是Number,Varchar2,DateTime等或者也可以从字符集列表中选择其他字符集。

国家字符集的选择只有Unicode(AL32UTF8),这是为了存储ZHS16GBK字符集不能识别的其他国家的字符的时候用到的。

-2-

中国科技论文在线

3.2Client端字符集

Oracle的客户端安装过程中并没有选项选择OracleClient的字符集。

安装成功后,在注册表HKLOCAL_MACHINE\SOFTWARE\ORACLE\KEY_ORACLECLENT_HOME1\可以找到NLS_LANG键,值为当前OS的字符集。

如简体系统为:

ZHS16GBK,繁体系统为:

MSWIN950。

可见,OracleClient(以下简称NLS_LANG)在安装过程中选择了OS的字符集作为默认的NLS_LANG字符集。

4.泰文入库遇到的问题

问题演示

演示环境:

pl/sqldeveloper7.1.0.1337

1,新建表结构

TBL_THAI_TEST。

图2创建测试表结构执行语句截图

2,插入中文数据。

图3插入中文数据执行语句截图

3,插入泰文数据。

图4插入泰文数据执行语句截图

非常不幸运的是,把‘จีน’粘贴到pl/sqldev的sqlwindow的时候变成了‘?

’,-3-

中国科技论文在线说明客户端对‘จีน’用自己的字符集进行了一次转换,但是该字符集没有‘จีน’对应的编码。

windowsxp由于默认字符集是gbk,所以想在c命令提示符下粘贴输入也是不可能的,经过测试也是无法正确显示‘จีน’,由于american_america.al32utf8是可以支持泰文的,执行语句setnls_lang=american_america.al32utf8,依然是无法正确将泰文粘贴进去。

那么,到底如何解决泰文等多国语言正确存入oracle的问题呢?

5.解决方案

笔者经过多次反复测试终于解决了这个问题。

解决方案是通过SQL*LOADER实现了泰文入库,并且相继用该方法实现了阿拉伯语入库等。

对于SQL*LOADER需要的数据文件我们需要使用UFT8来存储,这个时候我们需要定义字段为使用国家字符集的数据类型,比如NVARCHAR2。

SQL*LOADER简介

SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中。

SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)[5]。

实现过程:

1)创建数据表。

数据表使用上文中提到的表tbl_thai_test,建表语句见图2,需要注意的是存储多国语言信息的字段应该设置成NVARCHAR2。

打开dos命令窗口,设置SQL*LOADER客户端NLS_LANG

环境变量nls_lang为american_america.al32utf8。

图5修改dos语言环境变量执行语句截图

2

)准备SQL*LOADER控制文件,命名为tbl_thai_test.ctl。

图6控制文件内容截图

3)数据文件,命名为tbl_thai_test.txt。

图7数据文件内容截图

4)执行导入命令。

-4-

中国科技论文在线

图8dos下执行导入数据截图

5)导入后,中泰文数据查询正常。

图9PL/SQL下查询数据截图

6)将泰文拷贝出来后,在google中翻译得到如下结果:

图10网页翻译泰文截图

6.结论

本文提出了小语种语言入库时遇到的乱码问题,通过以上测试我们可以得出如下结论:

1)对于多国语言的数据库字段,应该使用Oracle支持的国家语言数据类型,如NVARCHAR2等。

2)由于本次使用数据库国家字符集为AL16UTF16,因此完全支持多国语言数据存储。

本方案不仅仅是解决泰语入库问题,相应的对于其他小语种语言的入库也可以实现,并且是在实践当中得到证实的。

7.致谢

感谢老师的悉心指导,感谢网秦天下提供测试平台,感谢网秦员工热心帮助。

-5-

中国科技论文在线

参考文献

[1]JackWu.理解ORACLE数据库字符集[EB/OL].。

[2]RobertG.Freeman.PortableDBAOracleEssentialTechniquesfortheDay-to-DayDBA[M].商云飞,李勇.北京:

清华大学出版社,2006.4.

[3]何明.OracleDBA培训教程——从实践中学习Oracle数据库管理与维护(第2版)[M].北京:

清华大学出版社,2009.7。

[4]BenjaminRosenzweig.OralcePL/SQLbyExample[M].龚波.北京:

机械工业出版社,2009.6。

[5]盖国强.循序渐进Oracle数据库管理、优化与备份恢复[M].北京:

人民邮电出版社,2007.9。

[6]凤凰涅磐.深入了解字符集和编码[EB/OL].。

TheMulti-languageStorageofOracleDatabase

YangYifeng1,ZouShihong1,LinYu2,LiuYanqi2

1StateKeyLabofNetworkingandSwitchingTechnology,BeijingUniversityofPostsand

Telecommunications,Beijing(100876)

2BeijingNetQinTech.Co.,Ltd,Beijing(100013)

Abstract

Extract:

Thisthesisdevotesitselftoresearchonthemethodologyofmulti-lingualentrythatOracledatabaseadoptstorealizemulti-lingualinformationstorage,whichsolvestheproblemofunrecognizablecodewhennon-Chineseentryisapplied.Astheinternationalizationofbusinessinthedevelopmentprocessofenterprises,storageofbusinessinformationturnsintothecoexistenceofmultiplelanguagesfromasinglenationallanguage.Asaninternationaldatabaseplatform,oracleexhibitastrongtechnologicaladvantageofglobalization.Usingoraclestoredinformationinmultiplelanguageswillinevitablyencounteredproblemsthatcausedbyincompatibilityofcharacterset,suchasThai,Korean,Arabic,whenstoredinthedatabasethatthedefaultcharactersetisZHS16GBK,nationalcharactersetisAL16UTF16willrequirespecialmethods.

KeyWords:

ORACLE9I,Thaientry,multi-lingualinformationstorage,unrecognizablecode

作者简介:

杨毅峰,男,1984年生,研究生,主要研究方向是oracle数据库管理和应用以及数据仓库数据挖掘。

-6-

XX搜索“就爱阅读”,专业资料,生活学习,尽在就爱阅读网,您的在线图书馆

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1