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

?

不依賴字符集的數(shù)據(jù)庫非標(biāo)字段檢測方法

2012-06-13 02:09孟凡奇
東北電力大學(xué)學(xué)報 2012年4期
關(guān)鍵詞:存儲空間非標(biāo)字段

孟凡奇,趙 雷

(1.東北電力大學(xué)信息工程學(xué)院,吉林吉林132012;2.大慶油田電力集團(tuán)油田熱電廠,黑龍江大慶163314)

信息社會的絕大多數(shù)信息是存儲在MIS(Management Information System,管理信息系統(tǒng))中的,而MIS中真正存儲數(shù)據(jù)的是數(shù)據(jù)庫,人們從數(shù)據(jù)庫中獲取信息,同時也將新的信息錄入數(shù)據(jù)庫。因此,數(shù)據(jù)庫中的數(shù)據(jù)是否規(guī)范、正確就顯得尤為重要[1]。但是由于主觀故意或是數(shù)據(jù)錄入時的合法性檢測不嚴(yán)格等諸多原因,數(shù)據(jù)庫中難免出現(xiàn)少量非法數(shù)據(jù)。比如,電子郵箱的格式應(yīng)為“郵箱名@域名.com”,錄入“victor@yahoo.com”是正確的、合法的,而“★☆*@7#.cn”就是不正確的電子郵箱地址,可以定義為“非法”數(shù)據(jù)。這些非法數(shù)據(jù)的顯著特征之一就是含有非ASCII(American Standard Code for Information Interchange,美國信息互換標(biāo)準(zhǔn)代碼)字符。本文將含有非ASCII字符的字段稱為“非標(biāo)字段”。對于非法的非標(biāo)字段除了以預(yù)防為主以外還要及時的檢查并糾正[2]。

目前,大多數(shù)檢測非標(biāo)字段的方法是依賴于數(shù)據(jù)庫所用字符集的,檢測時要指定字符集名稱或使用其中的字符編碼,這就迫使DBA(Database Administrator,數(shù)據(jù)庫管理員)要對現(xiàn)有的字符集有一定程度的了解,增加了其額外工作量[3]。本文從數(shù)據(jù)表中字段的ASCII值和存儲空間角度,提出了兩種不依賴字符集的數(shù)據(jù)庫非標(biāo)字段檢測方法,實驗表明,這兩種方法與依賴于數(shù)據(jù)庫所用字符集的非標(biāo)字段檢測方法取得了同樣的效果。

1 基于字符集的檢測方法

字符是各種文字和符號的總稱,包括數(shù)字、標(biāo)點符號、圖形符號、各國文字等。計算機(jī)要準(zhǔn)確識別、存儲和處理各種字符,需要對其進(jìn)行編碼[4-6]。由于編碼的字符數(shù)量和規(guī)則不盡相同,因此形成了不同版本的字符的集合,簡稱字符集。字符集種類較多,數(shù)據(jù)庫中常用的字符集有:ASCII字符集、GB2312字符集、BIG5字符集、Unicode字符集等。

ASCII字符集是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng),對應(yīng)的國際標(biāo)準(zhǔn)為ISO646。它用7位(bits)表示一個字符,共128個字符。而國內(nèi)數(shù)據(jù)庫常用的GB2312又稱為GB2312-80字符集,全稱為《信息交換用漢字編碼字符集·基本集》,是中國國家標(biāo)準(zhǔn)的簡體中文字符集。它所收錄的漢字已經(jīng)覆蓋99.75%的使用頻率,一個漢字用2個字節(jié)表示。GB2312收錄簡化漢字及一般符號、序號、數(shù)字、拉丁字母、日文假名、希臘字母、俄文字母、漢語拼音符號、漢語注音字母,共7445個圖形字符[7-9]。

不同字符集中的字符能夠互相轉(zhuǎn)換,但非標(biāo)字符轉(zhuǎn)換前后可能會發(fā)生變化。以O(shè)racle11g數(shù)據(jù)庫為例,轉(zhuǎn)換工作可由CONVERT函數(shù)完成,其格式為:

其中:“char”代表要轉(zhuǎn)換的字符串;“dest_char_set”代表目標(biāo)字符集;“source_char_set”代表原字符集。

利用該函數(shù)進(jìn)行非標(biāo)字段檢測,需要先將疑似非標(biāo)字段轉(zhuǎn)換為ASCII,然后比較轉(zhuǎn)換前后字段值是否相等,若不相等即可斷定為非標(biāo)字段。但在檢測之前DBA需要了解數(shù)據(jù)庫所使用的字符集。若數(shù)據(jù)庫采用 GB2312字符集,則應(yīng)將參數(shù)“dest_charset”設(shè)置為“US7ASCII”,將參數(shù)“source_charset”設(shè)置為“ZHS16CGB231280”??梢?,該方法是依賴于字符集的[10]。

2 不依賴字符集的檢測方法

依賴于字符集的檢測方法加重了DBA的負(fù)擔(dān),考慮到ASCII字符使用1個字節(jié)的存儲空間,而非標(biāo)字符使用2~3個字節(jié)的存儲空間,同時非ASCII字符集中的非標(biāo)字符在轉(zhuǎn)換為ASCII時會發(fā)生改變[11-12],因此提出兩種不依賴字符集的非標(biāo)字段檢測方法。

2.1 基于長度對比的檢測方法

數(shù)據(jù)庫中字段的物理存儲空間和字段的邏輯長度是不同的概念。存儲空間是字段占用的字節(jié)數(shù),邏輯長度是字段中字的個數(shù)。若字段中不含非標(biāo)字符,那么二者是相等的,否則不相等。仍以O(shè)racle11g數(shù)據(jù)庫為例,函數(shù)LENGTH(char)可計算字段的邏輯長度,函數(shù)LENGTHB(char)能計算字段的存儲空間,例如以下兩條查詢語句:

語句(1)執(zhí)行后的返回結(jié)果為2,語句(2)執(zhí)行后的返回結(jié)果為4。若要判斷“e_mail”字段是否含有非標(biāo)數(shù)據(jù)可以使用條件“l(fā)ength(e_mail)<>lengthb(e_mail)”進(jìn)行判斷,若執(zhí)行結(jié)果為TRUE,說明該條記錄的“e_mail”字段數(shù)據(jù)的邏輯長度與存儲長度不相等,則“e_mail”字段必是非標(biāo)字段。由于這種方法在使用時無需指定字符集,因此對于DBA而言是不依賴字符集的。

2.2 基于取ASCII值的檢測方法

將非標(biāo)字符強(qiáng)制轉(zhuǎn)換為ASCII時,其值會發(fā)生變化,這是由字符集的編碼規(guī)則決定的。在Oracle11g數(shù)據(jù)庫中,函數(shù)ASCIISTR(char)可以計算字段的ASCII值。比如以下兩條查詢語句:

語句(3)執(zhí)行后的返回結(jié)果為“〈FD8·97D”,語句(4)執(zhí)行后的返回結(jié)果仍將會是“abc”。根據(jù)這一特性,可以判斷取值前后的字段值是否相同,不相同則必是非標(biāo)字段。若判斷“e_mail”字段是否含有非標(biāo)數(shù)據(jù)可以使用條件“e_mail<>asciistr(e_mail)”進(jìn)行判斷,若結(jié)果為TRUE,說明該條記錄的“e_mail”字段數(shù)據(jù)轉(zhuǎn)換前后并不相同,則“e_mail”字段必是非標(biāo)字段。此方法也無需指定字符集,因此對于DBA而言也是不依賴字符集的。

3 實驗及結(jié)果

數(shù)據(jù)庫服務(wù)器采用DELL Power Edge T410。以O(shè)racle11g數(shù)據(jù)庫中dba_objests視圖為藍(lán)本,通過“create table test as select* from dba_objests”語句創(chuàng)建測試數(shù)據(jù)庫。Test表的結(jié)構(gòu)如表1所示。

表1 Test表的結(jié)構(gòu)

然后向Test表插入4條含有非標(biāo)字段的記錄(如圖1所示)

重復(fù)執(zhí)行“insert into test select* from test”語句,直至數(shù)據(jù)表TEST中的記錄數(shù)達(dá)到8865920條,其中包括非標(biāo)字段記錄512條??紤]到Oracle的共享池等機(jī)制能夠緩存查詢結(jié)果,提高對同一個表類似查詢的速度,因此將test表復(fù)制2份,分別命名為test2和test3。3條測試語句(表2所示)及其查詢結(jié)果(圖2所示)如下:

圖1 含非標(biāo)字段的4條記錄

表2 測試用例及執(zhí)行時間

圖2 測試語句的查詢結(jié)果(部分)

4 結(jié) 論

本文提出的兩種不依賴字符集的非標(biāo)字段檢測方法與目前大多數(shù)依賴于字符集的檢測方法在性能上沒有明顯差別,同樣檢測到了含有中文、特殊符號等非標(biāo)字符的記錄。但與傳統(tǒng)方法相比,DBA無需了解數(shù)據(jù)庫所使用的字符集,相對減輕了負(fù)擔(dān)。更重要的是為及時發(fā)現(xiàn)并糾正非法數(shù)據(jù),避免MIS運(yùn)行風(fēng)險提供了新的有效手段。

[1]龔建華.基于多全體復(fù)制的Orache數(shù)據(jù)同步研究[J].辦公自動化,2011(3):27-29.

[2]鐘小權(quán),葉猛.Oracle數(shù)據(jù)庫的SQL語句優(yōu)化[J].計算機(jī)與現(xiàn)代化,2011(3):124-130.

[3]閃四清,楊強(qiáng).Oracle Database 10g基礎(chǔ)教程[M].北京:清華大學(xué)出版社,2009.

[4]孟凡奇.一種在JSP頁面上分頁顯示Oracle中記錄的方法[J].科技創(chuàng)新導(dǎo)報,2007(36):50-50.

[5]岳國華,趙靜靜.基于ORACLE數(shù)據(jù)庫的多媒體數(shù)據(jù)SQL級操作探究[J].計算機(jī)技術(shù)與發(fā)展,2011,24(4):152-155.

[6]孫風(fēng)棟,閆海珍.Oracle 10g數(shù)據(jù)庫系統(tǒng)性能優(yōu)化與調(diào)整[J].計算機(jī)技術(shù)與發(fā)展,2009,9(2):13-16.

[7]王君,祝永志.基于Oracle分布式數(shù)據(jù)庫的查詢優(yōu)化[J].計算機(jī)技術(shù)與發(fā)展,2008,18(1):43-45.

[8]ZHONG Xiao-quan.Optimization of SQL Sentence for Oracle Database[J].Computer and Modernization,2011(3):124 -126,130.

[9]華連生,丁憲生,呂剛.基于Oracle的氣象數(shù)據(jù)共享系統(tǒng)[J].計算機(jī)應(yīng)用,2010,30(2):162-164.

[10]DENG Zhong-liang,Optimizing Access to Spatial Data Based on Oracle and ArcSDE[J].Computer Engineering & Software,2011,32(2):78-80.

[11]黃勇,趙靖.一種基于分布式數(shù)據(jù)庫的關(guān)聯(lián)規(guī)則挖掘新算法[J].計算機(jī)技術(shù)與發(fā)展,2011,21(2):147-150.

[12]劉媛,涂曉東.關(guān)于外包數(shù)據(jù)庫完整性驗證的研究[J].計算機(jī)技術(shù)與發(fā)展,2011,20(5):147-149.

猜你喜歡
存儲空間非標(biāo)字段
非標(biāo)設(shè)備制造質(zhì)量控制計劃的編制和實施
圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
基于多種群協(xié)同進(jìn)化算法的數(shù)據(jù)并行聚類算法
蘋果訂閱捆綁服務(wù)Apple One正式上線
用好Windows 10保留的存儲空間
非標(biāo)壓力容器報價快速估算方法探討
非標(biāo)項目外協(xié)采購加權(quán)綜合打分法實踐研究
頂蓋后橫梁非標(biāo)斜楔模具設(shè)計
CNMARC304字段和314字段責(zé)任附注方式解析
無正題名文獻(xiàn)著錄方法評述
北安市| 綦江县| 泰顺县| 东平县| 新巴尔虎左旗| 抚顺县| 务川| 广丰县| 周宁县| 张北县| 南岸区| 固阳县| 剑河县| 清河县| 贺州市| 如东县| 海阳市| 长沙市| 贞丰县| 南涧| 额敏县| 张北县| 安泽县| 泰来县| 汉沽区| 涞源县| 普洱| 泽库县| 白银市| 黄骅市| 和林格尔县| 商都县| 渝北区| 四平市| 洛南县| 宜阳县| 应用必备| 汝南县| 柏乡县| 高碑店市| 孙吴县|