|
一.引言 ??? ORACLE數(shù)據(jù)庫字符集,即Oracle全球化支持(Globalization Support),或即國家語言支持(NLS)其作用是用本國語言和格式來存儲(chǔ)、處理和檢索數(shù)據(jù)。利用全球化支持,ORACLE為用戶提供自己熟悉的數(shù)據(jù)庫母語環(huán)境,諸如日期格式、數(shù)字格式和存儲(chǔ)序列等。Oracle可以支持多種語言及字符集,其中oracle8i支持48種語言、76個(gè)國家地域、229種字符集,而oracle9i則支持57種語言、88個(gè)國家地域、235種字符集。由于oracle字符集種類多,且在存儲(chǔ)、檢索、遷移oracle數(shù)據(jù)時(shí)多個(gè)環(huán)節(jié)與字符集的設(shè)置密切相關(guān),因此在實(shí)際的應(yīng)用中,數(shù)據(jù)庫開發(fā)和管理人員經(jīng)常會(huì)遇到有關(guān)oracle字符集方面的問題。本文通過以下幾個(gè)方面闡述,對(duì)oracle字符集做簡要分析 二.字符集基本知識(shí)
2.1字符集
2.2字符編碼方案
2.3 字符集超級(jí)
2.4 數(shù)據(jù)庫字符集(oracle服務(wù)器端字符集)
2.5 客戶端字符集(NLS_LANG參數(shù))
三.導(dǎo)入/導(dǎo)出與字符集轉(zhuǎn)換
3.1 EXP/IMP
EXP
IMP?
??? 四個(gè)字符集是
3.2導(dǎo)出的轉(zhuǎn)換過程
3.3導(dǎo)入的轉(zhuǎn)換過程
四.亂碼問題 ??? oracle在數(shù)據(jù)存儲(chǔ)、遷移過程中經(jīng)常發(fā)生字符亂碼問題,歸根到底是由于字符集使用不當(dāng)引起。下面以使用客戶端sqlplus向數(shù)據(jù)庫插入數(shù)據(jù)和導(dǎo)入/導(dǎo)出(EXP/IMP)過程為例,說明亂碼產(chǎn)生的原因。
4.1使用客戶端sqlplus向數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)
4.2發(fā)生亂碼原因
?
4.3導(dǎo)入/導(dǎo)出過程出現(xiàn)亂碼原因
五.單字節(jié)編碼存儲(chǔ)中文問題
???
由于歷史的原因,早期的oracle沒有中文字符集(如oracle6、oracle7、oracle7.1),但有的用戶從那時(shí)起就使用數(shù)據(jù)庫了,并用US7ASCII字符集存儲(chǔ)了中文,或是有的用戶在創(chuàng)建數(shù)據(jù)庫時(shí),不考慮清楚,隨意選擇一個(gè)默認(rèn)的字符集,如WE8ISO8859P1或US7ASCII,而這兩個(gè)字符集都沒有漢字編碼,雖然有些時(shí)候選用這種字符集好象也能正常使用,但用這種字符集存儲(chǔ)漢字信息從原則上說就是錯(cuò)誤的,它會(huì)給數(shù)據(jù)庫的使用與維護(hù)帶來一系列的麻煩。
六.結(jié)束語 ??? 為了避免在數(shù)據(jù)庫遷移過程中由于字符集不同導(dǎo)致的數(shù)據(jù)損失,oracle提供了字符集掃描工具(character set scanner),通過這個(gè)工具我們可以測(cè)試在數(shù)據(jù)遷移過程中由于字符集轉(zhuǎn)換可能帶來的問題,然后根據(jù)測(cè)試結(jié)果,確定數(shù)據(jù)遷移過程中最佳字符集解決方案。
|
表格部分代碼如下:
<table id="testTbl" border=1>
<tr id="tr1">
<td width=6%><input type=checkbox id="box1"></td>
<td id="b">第一行</td>
</tr>
<tr id="tr2">
<td width=6%><input type=checkbox id="box2"></td>
<td id="b">第二行</td>
</tr>
<tr>
<td width=6%><input type=checkbox id="box3"></td>
<td>第三行</td>
</tr>
</table>
動(dòng)態(tài)添加表行的javascript函數(shù)如下:
<script language="javascript">
function addRow(){
//添加一行
var newTr = testTbl.insertRow();
//設(shè)置行背景
newTr.bgColor = '#008040';
//添加兩列
var newTd0 = newTr.insertCell();
var newTd1 = newTr.insertCell();
//設(shè)置列內(nèi)容和屬性
newTd0.innerHTML = '<input type=checkbox id="box4">';
newTd1.innerText= '新增加的行';
}
</script>
<BR>
<a href="#" onclick="addRow();">增加一行</a>
就這么簡單,做點(diǎn)詳細(xì)的說明:
1、inserRow()和insertCell()函數(shù)
insertRow()函數(shù)可以帶參數(shù),形式如下:
insertRow(index)
這個(gè)函數(shù)將新行添加到index的那一行前,比如insertRow(0),是將新行添加到第一行之前。默認(rèn)的insertRow()函數(shù)相當(dāng)于insertRow(-1),將新行添加到表的最后。
insertCell()和insertRow的用法相同。
2、動(dòng)態(tài)設(shè)置屬性和事件
上面行數(shù)中的innerHTML和innerText都是列的屬性。
這個(gè)inner,就是“inner”到<tb></tb>之間,innerText是添加到<tb></tb>之間的文本,innerHTML是添加到<tb></tb>之間的HTML代碼(這個(gè)so簡單,這個(gè)解釋挺多余的)
設(shè)置其他屬性也是用同樣的方式,比如,設(shè)置行背景色
newTr.bgColor = 'red';
?
設(shè)置事件也一樣,需要簡單說明一點(diǎn)。
比如,我要讓點(diǎn)擊新加行的時(shí)候執(zhí)行一個(gè)自己定義的函數(shù) newClick,newClick行數(shù)如下:
function newClick(){
alert("這是新添加的行");
}
對(duì)onclick事件設(shè)置這個(gè)函數(shù)的代碼如下:
newTr.onclick = newClick;
這里需要主義的是,=后面的部分必須是函數(shù)名,而且不能帶引號(hào),
newTr.onclick = newClick();
newTr.onclick = 'newClick';
newTr.onclick = "newClick";
上面的寫法都是錯(cuò)誤的。
為什么,其實(shí)知道為什么沒有什么意思,知道怎么用就OK了,如果不想知道,可以跳過下面這一段。
?
實(shí)際上這個(gè)=后面的newClick是指向自己定義的newClick函數(shù)的指針,javascript里面函數(shù)名就是指向函數(shù)的指針,加了引號(hào)括號(hào)什么的瀏覽器就找不到那個(gè)函數(shù)了。
下面的寫法,也是正確的
newTr.onclick = function newClick(){
alert("這是新添加的行");
}
這個(gè)使用函數(shù)名實(shí)際上是一樣的
設(shè)置其他的事件用法相同。
J2EE程序中使用oracle數(shù)據(jù)庫LOB字段的總結(jié)(elathen) | ||||
???http://www.souzz.net 2005-10-23 文章出處:博客園 | ||||
? |
|
J2EE程序中使用oracle數(shù)據(jù)庫LOB字段的總結(jié)(elathen) | ||||
???http://www.souzz.net 2005-10-23 文章出處:博客園 | ||||
? |
|
方法二:
//處理頁面緩存