亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2016-02-11 21:26:19莫佩宏吳紫薇
        鐵路計算機應(yīng)用 2016年6期
        關(guān)鍵詞:字符集亂碼生僻字

        莫佩宏,吳紫薇

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

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

        莫佩宏,吳紫薇

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

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

        漢字;生僻字;配置;數(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ā),推行一體化概念。在這個思想的影響下,開始使用UCML企業(yè)級快速應(yīng)用開發(fā)平臺,該平臺基于.Net框架、C#語言,標(biāo)準(zhǔn)程度高,規(guī)范性強,軟件開發(fā)方便快捷,開發(fā)效率大大提高。作為引導(dǎo)項目,選擇了管理模式最為穩(wěn)定的人力資源管理系統(tǒng)進(jìn)行再次開發(fā),數(shù)據(jù)庫采用原有的Oracle數(shù)據(jù)庫。

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

        1 問題分析

        1.1 從編程語言方面分析

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

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

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

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

        程序中數(shù)據(jù)庫連接方式?jīng)Q定著不同的數(shù)據(jù)讀取方式和轉(zhuǎn)換方式,可能會導(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方式相比,要添加一個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)升級為11 G,持續(xù)應(yīng)用超過20年。雖然Oracle技術(shù)日新月異,但是由于引入的時間比較早,是Oracle針對中文配置字符集的初期,數(shù)據(jù)庫字符集設(shè)置為ZHS16CGB231280。

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

        聯(lián)合數(shù)據(jù)庫連接方式的改變,因為其中提到的前兩種連接方式都是需要.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多個,一般的生僻字都是不包括在內(nèi)的。在后期升級Oracle版本時考慮升級字符集,但是由于Oracle數(shù)據(jù)庫的特殊性,其字符集修改必須滿足新字符集是老字符集的超集(當(dāng)一種字符集A的編碼數(shù)值包含所有另一種字符集B的編碼數(shù)值,并且兩種字符集相同編碼數(shù)值代表相同的字符時,則字符集A是字符集B的超級,或稱字符集B是字符集A的子集)才可以修改,而后期出現(xiàn)的ZHS16GBK字符集雖囊括了近萬的漢字,卻無法保證是原字符集的超集,字符集的修改或轉(zhuǎn)換有可能帶來數(shù)據(jù)的丟失,存在很多不可預(yù)見的風(fēng)險,因此在近20年的Oracle使用中,我們始終沿用了ZHS16CGB231280漢字字符集。

        1.4 問題定位

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

        2 解決方案

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

        安裝配置一臺新的Oracle數(shù)據(jù)庫服務(wù)器,在創(chuàng)建數(shù)據(jù)庫時,可以指定字符集(CHARACTER SET)和國家字符集(NATIONAL CHARACTER SET)。數(shù)據(jù)庫字符集是指以什么編碼格式用來存儲CHAR,VARCHAR2,CLOB,LONG等類型數(shù)據(jù),用來標(biāo)示諸如表名、列名以及PL/SQL變量,存儲SQL和PL/SQL程序單元等,新的服務(wù)器配置指定字符集為ZHS16GBK,幾乎涵蓋目前為止最多的漢字生僻字;國家字符集用于存儲NCHAR,NVARCHAR2,NCLOB等類型數(shù)據(jù),國家字符集實質(zhì)上是為Oracle選擇的附加字符集,主要作用是為了增強Oracle的字符處理能力,因為NCHAR數(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ù)中,不但生僻字為亂碼,同時正常的中文注釋以及視圖、存儲過程等中存在的一些漢字代碼也丟失變?yōu)閬y碼,導(dǎo)致視圖和存儲過程等失效。(3)我們使用客戶端導(dǎo)入導(dǎo)出,導(dǎo)出時將客戶端與源服務(wù)器端字符集配置一致,導(dǎo)入時使客戶端與目標(biāo)服務(wù)器端字符集配置一致,結(jié)果顯示由于Dmp文件的頭文件格式不同,無法實現(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)入時轉(zhuǎn)換數(shù)據(jù)為目標(biāo)數(shù)據(jù)庫的字符集。在數(shù)據(jù)庫會話啟動之后,數(shù)據(jù)泵日志文件以NLS_LANG指定的語言寫入。利用數(shù)據(jù)泵對用戶進(jìn)行數(shù)據(jù)導(dǎo)入后暫時沒有發(fā)現(xiàn)其他問題,只是生僻字有顯示亂碼問題,通過客戶端和電子表格等結(jié)合方式,在目標(biāo)數(shù)據(jù)庫中將生僻字進(jìn)行統(tǒng)一修改,基本實現(xiàn)了數(shù)據(jù)遷移任務(wù)。

        3 結(jié)束語

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

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

        猜你喜歡
        字符集亂碼生僻字
        “龍行龘龘”走紅,帶來什么思考?
        生僻字里識青銅
        這些真的不是亂碼,是漢字
        MySQL數(shù)據(jù)庫字符集的問題研究
        ORACLE字符集問題的分析
        扒一扒“愛加戲”的生僻字
        ORACLE數(shù)據(jù)庫字符集問題及解決方法
        醫(yī)院信息系統(tǒng)Oracle數(shù)據(jù)庫中導(dǎo)入數(shù)據(jù)中文亂碼的解決技術(shù)
        當(dāng)?shù)孛錾隙嘁糇?,生僻字你能讀對嗎?
        炫邁:用神奇亂碼勾引你視線
        国产一区二区长腿丝袜高跟鞋| 久久青青草原国产毛片| 亚洲天堂一区二区偷拍| 亚洲天堂久久午夜福利| 国产成人无码专区| 欧美黑人群一交| 开心五月激情综合婷婷| 99偷拍视频精品一区二区| 国产乱妇乱子视频在播放| 精品久久久久久国产| 日韩精品网| 蜜桃在线一区二区三区| 少妇人妻中文字幕在线| 91九色最新国产在线观看 | 日韩高清不卡一区二区三区| 成年美女黄的视频网站| 国产精品成人免费视频一区| 亚洲成a人无码| 日本一区午夜艳熟免费| 精品人妻av区乱码| 国产洗浴会所三级av| 亚洲中文字幕精品久久吃奶| 视频在线观看国产自拍| 亚洲男同gay在线观看| 亚洲精品成人网线在线播放va| 夜夜躁狠狠躁2021| 日本a在线播放| 国产高清黄色在线观看91| 亚洲伦理一区二区三区| 日韩精品视频免费福利在线观看 | 中出内射颜射骚妇| 日本不卡视频网站| 无码超乳爆乳中文字幕| 亚洲激情视频在线观看a五月| 国产人妻鲁鲁一区二区| 国产农村熟妇videos| 欧美怡红院免费全部视频| 中国猛少妇色xxxxx| 久久久国产精品福利免费| 亚洲精品国产精品av| 日本免费看片一区二区三区|