<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    孤燈野火
    暢想的天空
    posts - 2,comments - 4,trackbacks - 0
    【背景介紹】
    ===================================================================
    最近在使用Oracle9i數(shù)據(jù)庫進行數(shù)據(jù)插入、查詢、導入/出,有時會出現(xiàn)亂碼的情況,具體的情形有以下兩種:

    1.首次插入/顯示亂碼

    2.首次插入/顯示正常、但把數(shù)據(jù)用工具導出為本地文件(例如TXT)文件,再在另一個客戶端中打開該文件并執(zhí)行時再次插入的數(shù)據(jù)顯示為亂碼。

    遂在本地創(chuàng)建兩個數(shù)據(jù)庫,一個為AL32UTF8字符集,一個為ZHS16GBK字符集,配合客戶端NLS_LANG的不同設(shè)置,測試亂碼的情況及進行原因分析。    
    ===================================================================

    【測試目的】
    ===================================================================
    測試不同的數(shù)據(jù)庫字符集和客戶端NLS_LANG搭配下,中文字符/中文日期的插入、顯示
    ===================================================================

    【測試環(huán)境】
    ===================================================================
    Windows 2000 Professional (英文版) + Oracle 9.2.0.1.0 + SQL*Plus: Release 9.2.0.1.0

    注:此次測試的客戶端應用工具為SQL*PLUS,如果是使用TOAD、PL/SQL Develop之類工具,得到的結(jié)果會和以下有些不同。推薦使用SQL*PLUS作為一切客戶端應用的測試工具
    ===================================================================

    【測試數(shù)據(jù)庫】
    ===================================================================
    本機數(shù)據(jù)庫1: SID: PAULLIN 登陸參數(shù): qprod/qprod@paullin
    本機數(shù)據(jù)庫2:SID: PAUL    登陸參數(shù):qlinpen/pengpenglin@paul
    ===================================================================

    【測試字符集】
    ===================================================================
    客戶端應用/操作系統(tǒng)字符集:GB2312

    客戶端NLS_LANG設(shè)置:
      AMERICAN_AMERICA.US7ASCII
      AMERICAN_AMERICA.WE8MSWIN1252
      AMERICAN_AMERICA.ZHS16GBK
      AMERICAN_AMERICA.AL32UTF8
      SIMPLIFIED CHINESE_CHINA.ZHS16GBK

    數(shù)據(jù)庫端字符集:
      PAULLIN: AL32UF8
      PAUL: ZHS16GBK
    ===================================================================

    【測試腳本】
    ===================================================================
    --登陸數(shù)據(jù)庫    
         sqlplus
    qprod/qprod@paullin     
         sqlplus
    qlinpen/pengpenglin@paul

    --執(zhí)行測試腳本
         drop table test;
         drop table testdate;    

         create table test (id number(1), name varchar2(20));
         create table testdate (birthday date);  

         insert into test values(1,'Tom');
         insert into test values(2,'張三');
         insert into test values(3,'易建聯(lián)');
         commit;
        
         insert into testdate values(TO_Date( '01/08/2008 04:14:00 下午',
               'MM/DD/YYYY HH:MI:SS AM'));
         commit;
        
    --查看測試結(jié)果    
         select * from test;
         select * from testdate;    
    ===================================================================

    【測試一:數(shù)據(jù)庫端字符集為AL32UTF8的情況】
    ===================================================================
    1.登陸數(shù)據(jù)庫:
      C:\Documents and Settings\qlinpen.E0015609D6309>sqlplus qprod/qprod@paullin

    2.查看數(shù)據(jù)庫字符集:
      SQL> select * from nls_database_parameters where parameter = 'NLS_CHARACTERSET';    

    3.測試內(nèi)容及測試結(jié)果:
      1).客戶端NLS_LANG設(shè)置為AMERICAN_AMERICA.US7ASCII:
          中文字符測試:插入/顯示中文字符均為亂碼
          中文日期測試:ORA-01855: AM/A.M. or PM/P.M. required

      2).客戶端NLS_LANG設(shè)置為AMERICAN_AMERICA.WE8MSWIN1252:
          中文字符測試:插入/顯示中文字符均為正常
          中文日期測試:ORA-01855: AM/A.M. or PM/P.M. required
        
      3).客戶端NLS_LANG設(shè)置為AMERICAN_AMERICA.ZHS16GBK:
          中文字符測試:插入/顯示中文字符均為正常
          中文日期測試:ORA-01855: AM/A.M. or PM/P.M. required
      
      4).客戶端NLS_LANG設(shè)置為AMERICAN_AMERICA.AL32UTF8:
          中文字符測試:插入/顯示中文字符均為正常
          中文日期測試:ORA-01855: AM/A.M. or PM/P.M. required
        
      5).客戶端NLS_LANG設(shè)置為SIMPLIFIED CHINESE_CHINA.ZHS16GBK:
          中文字符測試:插入/顯示中文均為正常
          中文日期測試:插入/顯示中文日期均為正常,格式為DD-MM-YY(例如:08-1月 -08)  

    4.測試結(jié)論:
      從測試結(jié)果來看,當數(shù)據(jù)庫端字符集為AL32UTF8時,能夠使到中文字符被正確插入/顯示的NLS_LANG的字符集為:  WE8MSWIN1252、ZHS16GBK、AL32UTF8。
      
      但是要使到中文格式的時間能夠被正確插入,則NLS_LANG的LANGUAGE和TERRITORY設(shè)置必須為:SIMPLIFIED_CHINESE_CHINA
    ===================================================================

    【測試二:數(shù)據(jù)庫端字符集為ZHS16GBK的情況】
    ===================================================================
    1.登陸數(shù)據(jù)庫:
      C:\Documents and Settings\qlinpen.E0015609D6309>sqlplus qlinpen/pengpenglin@paul

    2.查看數(shù)據(jù)庫字符集:
      SQL> select * from nls_database_parameters where parameter = 'NLS_CHARACTERSET';    

    3.測試內(nèi)容及測試結(jié)果:
      1).客戶端NLS_LANG設(shè)置為AMERICAN_AMERICA.US7ASCII:
          中文字符測試:插入/顯示中文字符均為亂碼
          中文日期測試:ORA-01855: AM/A.M. or PM/P.M. required

      2).客戶端NLS_LANG設(shè)置為AMERICAN_AMERICA.WE8MSWIN1252:
          中文字符測試:插入/顯示中文字符均為亂碼
          中文日期測試:ORA-01855: AM/A.M. or PM/P.M. required
        
      3).客戶端NLS_LANG設(shè)置為AMERICAN_AMERICA.ZHS16GBK:
          中文字符測試:插入/顯示中文字符均為正常
          中文日期測試:ORA-01855: AM/A.M. or PM/P.M. required
      
      4).客戶端NLS_LANG設(shè)置為AMERICAN_AMERICA.AL32UTF8:
          中文字符測試:插入/顯示中文字符均為亂碼
          中文日期測試:ORA-01855: AM/A.M. or PM/P.M. required
        
      5).客戶端NLS_LANG設(shè)置為SIMPLIFIED CHINESE_CHINA.ZHS16GBK:
          中文字符測試:插入/顯示中文均為正常
          中文日期測試:插入/顯示中文日期均為正常,格式為DD-MM-YY(例如:08-1月 -08)  

    4.測試結(jié)論:
      從測試結(jié)果來看,當數(shù)據(jù)庫端字符集為ZHS16GBK時,能夠使到中文字符被正常插入/顯示的NLS_LANG的字符集為:ZHS16GBK。
      
      而且要使到中文格式的時間能夠被正確插入,則NLS_LANG的LANGUAGE和TERRITORY設(shè)置必須為:SIMPLIFIED CHINESE_CHINA
    ===================================================================

    【測試總結(jié)】
    ===================================================================
    從上面兩個測試的結(jié)果就可以明顯看出,把數(shù)據(jù)庫端的字符集設(shè)置為AL32UTF8比起ZHS16GBK更加有優(yōu)勢。

    UTF8支持從客戶端應用字符集為WE8MSWIN1252、ZHS16GBK、AL32UTF8的環(huán)境下進行中文字符的插入,而ZHS16GBK只支持客戶端應用字符集為ZHS16GBK環(huán)境下的的中文字符插入。

    其次我們來看看日期格式為:01/08/2008 04:14:00 下午的記錄為什么只能在NLS_LANG的LANGUAGE和TERRITORY為SIMPLIFIED CHINESE_CHINA的情況下才能正確插入?

    我們知道客戶端NLS_LANG的值由3部分構(gòu)成,即<LANUAGE>_<TERRITORY>.<CHARACTERSET>,而掌管日期中月份和日顯示的恰恰就是<LANGUAGE>部分,所以很明顯<LANGUAGE>為AMERICAN的情況下,是不可能正確插入的(西方用AM、PM來表示上、下午)。

    依次類推,如果以后出現(xiàn)貨幣和數(shù)字格式、地區(qū)和計算星期及日期的習慣插入、轉(zhuǎn)換失敗,那么我們就要檢查第二個元素<TERRITORY>。
    ===================================================================
    posted on 2010-09-17 16:04 孤飛燕 閱讀(288) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫
    主站蜘蛛池模板: 久久亚洲国产最新网站| a级亚洲片精品久久久久久久| 久久福利青草精品资源站免费| 毛片在线播放免费观看| 中文字幕人成人乱码亚洲电影| 羞羞漫画页面免费入口欢迎你| 国产精品综合专区中文字幕免费播放| 亚洲欧洲日韩国产综合在线二区| 久久精品国产亚洲av四虎| 亚洲一级黄色大片| 粉色视频免费入口| 亚洲成人免费在线| 成年人免费网站在线观看| 免费人成网站在线播放| 亚洲国产天堂在线观看| 久久精品毛片免费观看| 情侣视频精品免费的国产| 久久精品亚洲中文字幕无码网站| 久久午夜无码免费| 亚洲精品无码久久久久AV麻豆| 亚洲国产高清美女在线观看| a国产成人免费视频| 亚洲av午夜精品一区二区三区| 亚洲色图.com| a一级毛片免费高清在线| 国产亚洲综合一区柠檬导航| 美女免费精品高清毛片在线视| 亚洲精品一级无码鲁丝片| 91精品全国免费观看青青| 亚洲国产成人乱码精品女人久久久不卡 | 国产v亚洲v天堂无码网站| 黄色a级免费网站| 亚洲精品狼友在线播放| 91久久成人免费| 亚洲熟妇无码乱子AV电影| 在线精品自拍亚洲第一区| 亚洲精品白浆高清久久久久久| h在线观看视频免费网站| 午夜在线亚洲男人午在线| 国产亚洲精品激情都市| 国产午夜亚洲精品不卡电影|