国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

.Net框架聯(lián)合Oracle字符集問題研究

2016-02-11 21:26莫佩宏吳紫薇
關(guān)鍵詞:亂碼生僻字客戶端

莫佩宏,吳紫薇

(中車長春軌道客車股份有限公司,長春 130062)

.Net框架聯(lián)合Oracle字符集問題研究

莫佩宏,吳紫薇

(中車長春軌道客車股份有限公司,長春 130062)

本文通過大型國企軟件應(yīng)用中發(fā)現(xiàn)的漢字生僻字無法顯示問題,從開發(fā)工具到系統(tǒng)配置及數(shù)據(jù)庫連接方式等方面對問題發(fā)生的原因進(jìn)行了全方位的剖析,最終找到以升級(jí)Oracle數(shù)據(jù)庫字符集為最終解決方案,并對數(shù)據(jù)庫字符集升級(jí)方式進(jìn)行了全面測試,明確解決問題辦法,并在實(shí)際工作中進(jìn)行了實(shí)踐,為企業(yè)級(jí)Oracle數(shù)據(jù)庫的跨字符集升遷提供了良好的實(shí)踐經(jīng)驗(yàn)。

漢字;生僻字;配置;數(shù)據(jù)庫;字符集

中車長春軌道客車股份有限公司于1992開始使用Oracle數(shù)據(jù)庫,應(yīng)用系統(tǒng)早期開發(fā)工具一直使用Oracle產(chǎn)品提供的Developer2000,隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,ASP、JSP等成為主要應(yīng)用語言。最早自行開發(fā)的應(yīng)用系統(tǒng)是人力資源管理系統(tǒng),其中,各模塊的開發(fā)語言主要使用Developer2000,PB和ASP等。

隨著企業(yè)經(jīng)營管理理念的不斷提升和信息化技術(shù)的迅猛發(fā)展,2013年,我們從全局出發(fā),推行一體化概念。在這個(gè)思想的影響下,開始使用UCML企業(yè)級(jí)快速應(yīng)用開發(fā)平臺(tái),該平臺(tái)基于.Net框架、C#語言,標(biāo)準(zhǔn)程度高,規(guī)范性強(qiáng),軟件開發(fā)方便快捷,開發(fā)效率大大提高。作為引導(dǎo)項(xiàng)目,選擇了管理模式最為穩(wěn)定的人力資源管理系統(tǒng)進(jìn)行再次開發(fā),數(shù)據(jù)庫采用原有的Oracle數(shù)據(jù)庫。

人力資源管理系統(tǒng)的數(shù)據(jù)大多與個(gè)人信息有關(guān),表現(xiàn)最為明顯的就是員工姓名,其中,涉及很多日常比較少見的生僻字。在此次人力資源系統(tǒng)整合升級(jí)的過程中發(fā)現(xiàn),在顯示員工姓名時(shí),有些生僻字在系統(tǒng)中出現(xiàn)亂碼,這個(gè)問題雖然不是很大,但是卻直接影響著系統(tǒng)的使用性能,如果不能解決,會(huì)導(dǎo)致系統(tǒng)無法使用。

1 問題分析

1.1 從編程語言方面分析

1.1.1 配置編程語言中的字符編碼

字符編碼也稱字集碼,是把字符集中的字符編碼為指定集合中某一對象,以便文本在計(jì)算機(jī)中存儲(chǔ)和傳遞。常見的例子包括將拉丁字母表編碼成摩斯電碼和ASCII。在使用的編程語言中,一般都會(huì)引用一套字符編碼來解決文本轉(zhuǎn)換問題。

我們使用的快速開發(fā)平臺(tái)中配置文件中的字符編碼為“UTF8”,此編碼方式為目前主流的編碼配置,可以根據(jù)不同的符號(hào)自動(dòng)選擇編碼的長短。正常情況下可以滿足大部分網(wǎng)頁情況,但是,為了嘗試解決漢字亂碼問題,先后更換“GB2312”和“GBK”等專門針對簡體中文字符的編碼和擴(kuò)展編碼方式,都沒有達(dá)到預(yù)期效果。

1.1.2 更換數(shù)據(jù)庫連接方式

程序中數(shù)據(jù)庫連接方式?jīng)Q定著不同的數(shù)據(jù)讀取方式和轉(zhuǎn)換方式,可能會(huì)導(dǎo)致特殊字符在轉(zhuǎn)換過程中出現(xiàn)問題,因此在程序中嘗試逐一更換幾種目前主流的數(shù)據(jù)庫連接方式。

(1)OracleClient方式

引用類庫:System.Data.OracleClient.dll。

命名空間:System.Data.OracleClient。

連接字符串:“data source=oratest;user id=scott;password=tiger”

(2)OleDb方式

命名空間:System.Data.OleDb。

連接字符串:與OracleClient方式相比,要添加一個(gè)provider,微軟為“provider=MSDAORA.1;”或“provider=MSDAORA”,Oracle為“provider='Ora-OleDb.Oracle';”。

(3)Oracle 提供的Oracle Data Provider for .NET(ODP.net)方式

引用類庫:Oracle.DataAccesss.dll

命名空間:Oracle.DataAccess.Client和Oracle.DataAccess.Types

連接字符串:和OleDb方式格式相同,只是provider換為 “Provider=OraOLEDB.Oracle.1”

結(jié)果表明,無法正確顯示員工姓名中生僻字。

1.2 從框架方面分析

針對人力資源系統(tǒng),從2003年開始,我們使用ASP網(wǎng)絡(luò)語言開發(fā)了一系列應(yīng)用模塊,都沒有發(fā)現(xiàn)有姓名生僻字無法顯示的問題,而此次使用.Net框架卻出現(xiàn)顯示亂碼問題,分析可能是由于數(shù)據(jù)讀取解析方式不同造成的。

對比ASP這種前端解析開發(fā)語言,考慮.Net是否在框架方面有什么參數(shù)可配置,因此咨詢微軟支持工程師,對方表示到目前為止,微軟方面沒有這方面的配置。

1.3 從數(shù)據(jù)庫方面分析

從1992年Oracle6版本開始引入應(yīng)用,一直到現(xiàn)在,Oracle數(shù)據(jù)庫版本已經(jīng)升級(jí)為11 G,持續(xù)應(yīng)用超過20年。雖然Oracle技術(shù)日新月異,但是由于引入的時(shí)間比較早,是Oracle針對中文配置字符集的初期,數(shù)據(jù)庫字符集設(shè)置為ZHS16CGB231280。

1.3.1 數(shù)據(jù)庫客戶端字符集配置一致性問題

聯(lián)合數(shù)據(jù)庫連接方式的改變,因?yàn)槠渲刑岬降那皟煞N連接方式都是需要.Net程序發(fā)布服務(wù)器配置Oracle Client程序的,這就涉及到客戶端的字符集是否與數(shù)據(jù)庫服務(wù)器端字符集匹配的問題。將.Net程序發(fā)布服務(wù)器上的數(shù)據(jù)庫客戶端字符集通過注冊表和環(huán)境變量(NLS_LANG)兩種方式配置成與數(shù)據(jù)庫服務(wù)器字符集相同,卻依然無法正常顯示生僻字。

1.3.2 數(shù)據(jù)庫服務(wù)器字符集問題

數(shù)據(jù)庫服務(wù)器字符集為ZHS16CGB231280,查找相關(guān)使用手冊,了解到該字符集只涵蓋常用漢字7 000多個(gè),一般的生僻字都是不包括在內(nèi)的。在后期升級(jí)Oracle版本時(shí)考慮升級(jí)字符集,但是由于Oracle數(shù)據(jù)庫的特殊性,其字符集修改必須滿足新字符集是老字符集的超集(當(dāng)一種字符集A的編碼數(shù)值包含所有另一種字符集B的編碼數(shù)值,并且兩種字符集相同編碼數(shù)值代表相同的字符時(shí),則字符集A是字符集B的超級(jí),或稱字符集B是字符集A的子集)才可以修改,而后期出現(xiàn)的ZHS16GBK字符集雖囊括了近萬的漢字,卻無法保證是原字符集的超集,字符集的修改或轉(zhuǎn)換有可能帶來數(shù)據(jù)的丟失,存在很多不可預(yù)見的風(fēng)險(xiǎn),因此在近20年的Oracle使用中,我們始終沿用了ZHS16CGB231280漢字字符集。

1.4 問題定位

綜上所有測試結(jié)果,如果維持現(xiàn)有使用的工具和框架,唯一的解決方案就是針對數(shù)據(jù)庫字符集進(jìn)行升遷,將其字符集升遷至更大的漢字字符集,即ZHS16GBK。

2 解決方案

2.1 安裝配置新字符集下的Oracle數(shù)據(jù)庫服務(wù)器

安裝配置一臺(tái)新的Oracle數(shù)據(jù)庫服務(wù)器,在創(chuàng)建數(shù)據(jù)庫時(shí),可以指定字符集(CHARACTER SET)和國家字符集(NATIONAL CHARACTER SET)。數(shù)據(jù)庫字符集是指以什么編碼格式用來存儲(chǔ)CHAR,VARCHAR2,CLOB,LONG等類型數(shù)據(jù),用來標(biāo)示諸如表名、列名以及PL/SQL變量,存儲(chǔ)SQL和PL/SQL程序單元等,新的服務(wù)器配置指定字符集為ZHS16GBK,幾乎涵蓋目前為止最多的漢字生僻字;國家字符集用于存儲(chǔ)NCHAR,NVARCHAR2,NCLOB等類型數(shù)據(jù),國家字符集實(shí)質(zhì)上是為Oracle選擇的附加字符集,主要作用是為了增強(qiáng)Oracle的字符處理能力,因?yàn)镹CHAR數(shù)據(jù)類型可以提供對亞洲使用定長多字節(jié)編碼的支持,而數(shù)據(jù)庫字符集則不能。國家字符集在Oracle9i中進(jìn)行了重新定義,只能在unicode編碼中的AF16UTF16和UTF8中選擇,默認(rèn)值是AF16UTF16,新的服務(wù)器配置選擇默認(rèn)值。

2.2 數(shù)據(jù)遷移

新整合的人力資源系統(tǒng)基于新的數(shù)據(jù)庫服務(wù)器搭建,但原始數(shù)據(jù)需要無缺陷地進(jìn)行遷移,遷移至新的數(shù)據(jù)庫服務(wù)器。

2.2.1 Exp/Imp方式

(1)嘗試在數(shù)據(jù)庫服務(wù)器端使用Exp方式進(jìn)行數(shù)據(jù)導(dǎo)出;(2)通過Imp方式進(jìn)行數(shù)據(jù)導(dǎo)入,這種方式在導(dǎo)入導(dǎo)出期間做了字符集轉(zhuǎn)換,但是通過對Dmp文件中的頭文件分析,發(fā)現(xiàn)有數(shù)據(jù)丟失現(xiàn)象。在新導(dǎo)入的數(shù)據(jù)中,不但生僻字為亂碼,同時(shí)正常的中文注釋以及視圖、存儲(chǔ)過程等中存在的一些漢字代碼也丟失變?yōu)閬y碼,導(dǎo)致視圖和存儲(chǔ)過程等失效。(3)我們使用客戶端導(dǎo)入導(dǎo)出,導(dǎo)出時(shí)將客戶端與源服務(wù)器端字符集配置一致,導(dǎo)入時(shí)使客戶端與目標(biāo)服務(wù)器端字符集配置一致,結(jié)果顯示由于Dmp文件的頭文件格式不同,無法實(shí)現(xiàn)導(dǎo)入過程。

2.2.2 數(shù)據(jù)泵Expdp/impdp方式

數(shù)據(jù)泵導(dǎo)出通常保存數(shù)據(jù)為與數(shù)據(jù)來源的數(shù)據(jù)庫相同的字符集。數(shù)據(jù)泵導(dǎo)入時(shí)轉(zhuǎn)換數(shù)據(jù)為目標(biāo)數(shù)據(jù)庫的字符集。在數(shù)據(jù)庫會(huì)話啟動(dòng)之后,數(shù)據(jù)泵日志文件以NLS_LANG指定的語言寫入。利用數(shù)據(jù)泵對用戶進(jìn)行數(shù)據(jù)導(dǎo)入后暫時(shí)沒有發(fā)現(xiàn)其他問題,只是生僻字有顯示亂碼問題,通過客戶端和電子表格等結(jié)合方式,在目標(biāo)數(shù)據(jù)庫中將生僻字進(jìn)行統(tǒng)一修改,基本實(shí)現(xiàn)了數(shù)據(jù)遷移任務(wù)。

3 結(jié)束語

通過對人力資源管理系統(tǒng)進(jìn)行再次開發(fā),分析出現(xiàn)的問題及解決方案,我們可以總結(jié)如下:(1)針對.Net框架語言,由于其是微軟開發(fā)的,使用Oracle數(shù)據(jù)庫會(huì)存在一些不可預(yù)見的兼容問題;(2)對于Oracle而言,字符集的更改需要進(jìn)行大量的測試工作,不斷地發(fā)現(xiàn)問題和解決問題,最終實(shí)現(xiàn)字符集升遷和數(shù)據(jù)的成功遷移。

責(zé)任編輯 陳 蓉

Analysis of Oracle character set problem under .Net frame

MO Peihong,WU Ziwei
( CRRC Changchun Railway Vehicles Co.Ltd.,Changchun 130062,China)

By software application in large state-owned enterprise,it was found that some rare used Chinese characters could not be displayed.In this text,the problem was comprehensively analyzed from aspects of tool development,system confguration,data base connection and so on.The solution was to upgrade Oracle database character set.The method of upgrading database character set was comprehensively tested to confrm the solution and check it in practice,which provided good practical experience in cross-character set upgrade of enterprise-level Oracle database.

Chinese character;rare used Chinese character;confguration;database;character set

TP392

A

1005-8451(2016)06-0043-03

2015-12-02

莫佩宏,教授級(jí)高級(jí)工程師;吳紫薇,高級(jí)工程師。

猜你喜歡
亂碼生僻字客戶端
生僻字里識(shí)青銅
對癥下藥解決多種亂碼難題
讓語文老師也會(huì)懷疑人生的生僻字
學(xué)習(xí)生僻字
這些真的不是亂碼,是漢字
如何看待傳統(tǒng)媒體新聞客戶端的“斷舍離”?
挑戰(zhàn)動(dòng)物生僻字
縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
孵化垂直頻道:新聞客戶端新策略
大樞紐 云平臺(tái) 客戶端——中央人民廣播電臺(tái)的探索之路
伊宁市| 南平市| 南宫市| 茌平县| 高唐县| 神农架林区| 海口市| 湖北省| 黔西| 平南县| 曲阳县| 大冶市| 葵青区| 绥化市| 江油市| 苗栗市| 巴林右旗| 佛冈县| 马山县| 长白| 长治县| 青冈县| 新建县| 荣成市| 韶关市| 胶州市| 郯城县| 杨浦区| 酉阳| 阳新县| 大洼县| 区。| 信丰县| 朝阳市| 罗江县| 岫岩| 宝清县| 清远市| 梁河县| 安多县| 林周县|