最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Orace查詢數(shù)據(jù)出現(xiàn)亂碼的問(wèn)題解決思路

 更新時(shí)間:2013年01月02日 09:31:32   作者:  
經(jīng)常有些朋友會(huì)遇到,我明明是輸入的正確中文,為什么我在另外一臺(tái)電腦上查詢卻出現(xiàn)亂碼啦?其實(shí)這個(gè)是數(shù)據(jù)庫(kù)在進(jìn)行字符集轉(zhuǎn)換的時(shí)候出現(xiàn)了問(wèn)題,本文介紹解決方法,需要了解的朋友可以參考下
問(wèn)題描述
經(jīng)常有些朋友會(huì)遇到,我明明是輸入的正確中文,為什么我在另外一臺(tái)電腦上查詢卻出現(xiàn)亂碼啦?其實(shí)這個(gè)是數(shù)據(jù)庫(kù)在進(jìn)行字符集轉(zhuǎn)換的時(shí)候出現(xiàn)了問(wèn)題,
下面通過(guò)測(cè)試來(lái)描述具體的情況:

1.環(huán)境
Oracle 數(shù)據(jù)庫(kù)字符集:
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as scott
SQL> SELECT * FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'NLS_CHARACTERSET';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
------------------------------ -------------------------------------------------------------------------------- ------------------------------------------------------------------------------
NLS_CHARACTERSET ZHS16GBK Character set
Oracle 數(shù)據(jù)庫(kù)所在的客服端字符集:
在注冊(cè)表的:NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 如下圖:
 
Oracle 所在的操作系統(tǒng)的字符集:
Microsoft Windows [版本 6.1.7601]
版權(quán)所有 (c) 2009 Microsoft Corporation。保留所有權(quán)利。
C:\Users\Andy>chcp
活動(dòng)代碼頁(yè): 936
表示是:中國(guó) - 簡(jiǎn)體中文(GB2312)

2.測(cè)試
字符集如下:
Oracle 數(shù)據(jù)庫(kù)字符集:ZHS16GBK
Oracle 數(shù)據(jù)庫(kù)客戶端字符集:ZHS16GBK
操作系統(tǒng)字符集:中國(guó) - 簡(jiǎn)體中文(GB2312)
輸入測(cè)試數(shù)據(jù):
SQL> INSERT INTO TAB_INDX
2 values(1,'漢字輸入字符集測(cè)試','Chinese Input Test',sysdate);
1 row inserted
字符集不修改,進(jìn)行測(cè)試數(shù)據(jù)現(xiàn)實(shí):
SQL> select * from tab_indx where tid = 1;
TID TNAME TDESC SYSDT
---------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -----------
1 漢字輸入字符集測(cè)試 Chinese Input Test 2012/12/30
顯示正常,
現(xiàn)在我把客服端的字符集修改為:UTF8
及注冊(cè)表的:NLS_LANG=SIMPLIFIED CHINESE_CHINA.UTF8
現(xiàn)在字符集如下:
Oracle 數(shù)據(jù)庫(kù)字符集:ZHS16GBK
Oracle 數(shù)據(jù)庫(kù)客戶端字符集:UTF8
操作系統(tǒng)字符集:中國(guó) - 簡(jiǎn)體中文(GB2312)
現(xiàn)在再查詢剛才輸入的數(shù)據(jù):
SQL> select tname,tdesc from tab_indx;
TNAME TDESC
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
發(fā)現(xiàn)查詢出來(lái)的數(shù)據(jù)已經(jīng)不能正常現(xiàn)實(shí),因?yàn)檫@些漢字是以ZHS16GBK編碼格式存儲(chǔ)的,然而你查詢出來(lái)后根據(jù)Oracle客服端的編碼(UTF8)轉(zhuǎn)換,及轉(zhuǎn)成了UTF8的編碼格式,但是操作系統(tǒng)是簡(jiǎn)體中文(GB2312),所以操作系統(tǒng)就把UTF8編碼格式的數(shù)據(jù),當(dāng)成簡(jiǎn)體中文(GB2312)的編碼格式數(shù)據(jù)顯示,結(jié)果就出現(xiàn)了亂碼,
現(xiàn)在我再插入一筆數(shù)據(jù):
SQL> INSERT INTO TAB_INDX
2 values(1,'UTF8下漢字輸入字符集測(cè)試','Chinese Input Test',sysdate);
1 row inserted
再查詢:
SQL> select tname,tdesc from tab_indx;
TNAME TDESC
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
發(fā)現(xiàn)新插入的數(shù)據(jù)也出現(xiàn)了亂碼,但是亂碼跟剛才的值不一樣??為什么呢?
因?yàn)檩斎氲臐h字,是簡(jiǎn)體中文(GB2312)的編碼格式,當(dāng)Oracle數(shù)據(jù)庫(kù)按照客戶端的編碼格式傳給數(shù)據(jù)庫(kù),Oracle數(shù)據(jù)庫(kù)發(fā)現(xiàn),Oracle數(shù)據(jù)庫(kù)客戶端是UTF8的編碼格式,跟數(shù)據(jù)庫(kù)的編碼格式(ZHS16GBK)不一樣,就進(jìn)行字符集轉(zhuǎn)換,UTF8-->ZHS16GBK,所以把簡(jiǎn)體中文(GB2312)的編碼格式的數(shù)據(jù)當(dāng)成UTF8,轉(zhuǎn)為ZHS16GBK的編碼格式數(shù)據(jù),就已經(jīng)出錯(cuò)啦,查詢出來(lái)自然轉(zhuǎn)換回去就不行啦
(本來(lái)需要測(cè)試Oracle數(shù)據(jù)庫(kù)的字符集修改后的情況,這種情況暫時(shí)不測(cè)試)這里我們?cè)诎袿racle客戶的字符集修改回去;
在注冊(cè)表的:NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
現(xiàn)在字符集如下
Oracle 數(shù)據(jù)庫(kù)字符集:ZHS16GBK
Oracle 數(shù)據(jù)庫(kù)客戶端字符集:ZHS16GBK
操作系統(tǒng)字符集:中國(guó) - 簡(jiǎn)體中文(GB2312)
再查詢:
SQL> select tname,tdesc from tab_indx;
TNAME TDESC
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
漢字輸入字符集測(cè)試 Chinese Input Test
UTF8????????????? Chinese Input Test
發(fā)現(xiàn)最開(kāi)始輸入的漢字正常啦,但是第二次輸入的漢字,又變了,跟上次的亂碼不一樣????
雖然這里沒(méi)有進(jìn)行編碼格式轉(zhuǎn)換,但是上次在存數(shù)據(jù)的時(shí)候,已經(jīng)是存的錯(cuò)誤的編碼格式,所以顯示出來(lái)肯定不正確
其實(shí)還有好幾種情況測(cè)試,由于本地環(huán)境的限制,所以測(cè)試的其它情況,大家可以去試試,如:數(shù)據(jù)庫(kù)的字符集是UTF8,然后客服端的字符集變化,對(duì)漢字的輸入輸出有什么影響
根據(jù)上面的測(cè)試情況和我自己的分析,現(xiàn)在總結(jié)如下:
1.數(shù)據(jù)庫(kù)的查詢出來(lái)的數(shù)據(jù),是Oracle數(shù)據(jù)庫(kù)字符集,Oracle客戶端字符集,操作系統(tǒng)字符集共同作用的結(jié)果。
2.Oracle存數(shù)據(jù)和查詢數(shù)據(jù)都是通過(guò)Oracle數(shù)據(jù)庫(kù)的字符集和Oracle客服端的字符集進(jìn)行轉(zhuǎn)換的,顯示數(shù)據(jù)又是根據(jù)操作系統(tǒng)的字符集來(lái)確定的。
3.為了避免出現(xiàn)亂碼必須要把Oracle客戶端的字符集和操作系統(tǒng)的字符集設(shè)置成一樣的。

相關(guān)文章

最新評(píng)論

博兴县| 霍城县| 朝阳区| 伊宁市| 文成县| 阳春市| 黄冈市| 蒲江县| 蕲春县| 家居| 探索| 浑源县| 秦皇岛市| 苏州市| 铜陵市| 伊川县| 乌鲁木齐县| 方山县| 凤翔县| 罗江县| 怀来县| 梓潼县| 论坛| 霍山县| 南木林县| 公安县| 通渭县| 金坛市| 洛宁县| 施甸县| 万荣县| 承德县| 体育| 辽宁省| 伊金霍洛旗| 平乐县| 灵川县| 四川省| 内乡县| 监利县| 蚌埠市|