• <tfoot id="ukgsw"><input id="ukgsw"></input></tfoot>
    
    • 久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
      分享

      如何設置Oracle數據庫客戶端字符集以及系統中的NLS

       instl 2019-04-19

      概述:
      本地化是系統或軟件運行的語言和文化環境。設置NLS_LANG環境參數是規定Oracle數據庫軟件本地化行為最簡單的方式。
      NLS_LANG參數不但指定了客戶端應用程序和Oracle數據庫所使用的語言和地區;同時也指定了客戶端程序輸入數據和顯示數據所使用的字符集。

      本文主要包含如下五部分
      ◆ NLS_LANG環境變量的構成
      ◆ NLS_LANG環境變量的格式
      ◆ 如何查看數據庫NLS參數設置
      ◆ 舉例說明如何設置NLS_LANG環境變量
      ◆ 舉例說明一些特殊情況

      一,NLS_LANG環境變量的構成
      NLS_LANG環境變量由如下三部分構成:
      1,LANGUAGE:客戶端系統所使用的語言。
      指定Oracle數據庫反饋的消息(例如異常信息,提示信息等)、字符數據的排列順序(當指定ORDER BY時)、日(年月日中的天)名稱,月名稱等所使用的語言。
      每個支持的語言都有唯一的名稱。例如,若操作系統使用簡體中文,則為SIMPLIFIED CHINESE;若操作系統使用美式英文操作系統,則為AMERICAN。
      LANGUAGE參數中隱含地區和字符集參數的信息。如果沒有指定LANGUAGE參數的值,則默認值為AMERICAN。
      2,TERRITORY:客戶端系統所在的地區。
      指定默認的日期,貨幣以及數字格式。
      每一個支持的地區都有唯一的名稱。如,CHINA,AMERICA或CANADA。
      如果沒有指定TERRITORY參數,則此參數的值由LANGUAGE參數推理得出。
      3,CHARSET:客戶端應用程序所使用的字符集。
      正確地設置NLS_LANG環境變量,則使得字符數據能夠在客戶端字符集和數據庫字符集之間正確地轉換。
      設置NLS_LANG不會改變客戶端系統的字符集,它僅僅是讓Oracle數據庫知道客戶端應用程序使用的是什么字符集,從而進行相應的字符集轉換。
      如果客戶端和數據庫字符集相同,則Oracle數據庫忽略字符集校驗,不執行字符集轉換。
      Oracle所支持的每個字符集都有唯一的縮寫。如,ZHS16GBK(GBK),AL32UTF8(UTF-8)等。
      每一個LANGUAGE默認都有一個和它關聯的字符集。

      二,NLS_LANG環境變量的格式
      NLS_LANG = LANGEAGE_TERRITORY.CHARSET
      注意,此處的.為英文逗號。

      三,如何查看數據庫NLS參數設置
      1,通過NLS_DATABASE_PARAMETERS視圖查看數據庫的NLS參數。
      SELECT * FROM NLS_DATABASE_PARAMETERS ORDER BY PARAMETER;
      查詢如下圖所示。其中,NLS_CHARACTERSET參數的值就表示數據庫所使用的字符集(創建數據庫時所指定的字符集)。

      2,通過NLS_SESSION_PARAMETERS視圖查看當前用戶會話的NLS參數。
      SELECT * FROM NLS_SESSION_PARAMETERS ORDER BY PARAMETER;
      查詢如下圖所示:

      四,舉例說明如何設置NLS_LANG環境變量
      此部分主要通過Oracle數據庫自帶的SQL PLUS數據庫客戶端程序說明如何設置NLS_LANG中的字符集。
      實驗環境:
      數據庫NLS參數設置:數據庫NLS參數設置如第三部分(查看數據庫NLS參數設置)中第一個圖所示,NLS_CHARACTERSET=AL32UTF8。
      操作系統:Windows 10英文企業版64位。
      實驗準備:
      1,創建一個表CHINESE_DATA

      CREATE TABLE CHINESE_DATA(
          CH_DATA VARCHAR2(64)
      );
      

      實驗一:
      此實驗舉例說明如何正確地設置命令行窗口和系統的NLS_LANG環境變量,從而能夠正確地顯示查詢結果。
      1,設置客戶端系統的NLS_LANG環境變量

      如上圖所示,Windows系統環NLS_LANG境變量的值為AMERICAN_AMERICA.ZHS16GBK,而數據庫的字符集為AL32UTF8。
      很顯然,數據庫字符集和客戶端NLS_LANG中的字符集不一樣。這就有可能導致客戶端查詢數據時出現亂碼。
      2,插入一條數據

      INSERT INTO CHINESE_DATA VALUES('漢字');
      COMMIT;

      注意:插入數據時可以借助PL/SQL Developer等工具,以確保數據能正確地輸入并存儲到數據庫中。
      3,使用默認環境,在不改變命令行窗口代碼頁(每個代碼頁都對應著一個字符集)的情況下查詢數據。
      437代碼頁對應的字符集主要包含拉丁字母。
      437代碼頁所包含的字符分類:


      如上圖所示,不出所料,查詢結果出現亂碼。
      實驗說明:
      數據庫字符集為AL32UTF8,Oracle通過NLS_LANG得知客戶端字符集為ZHS16GBK。
      Oracle在返回查詢結果時,把數據轉換為GBK格式,而437代碼頁所包含的字符中根本沒有漢字字符,所以顯示為亂碼。
      4,把命令行窗口的代碼頁改為65001,其對應的字符集為UTF-8。

      如上圖所示,查詢結果為不可見字符,也屬于亂碼。
      實驗說明:
      Oracle返回的數據為GBK字符集,而控制臺為UTF-8字符集。盡管UTF-8字符集是GBK字符集的超集(其包含了所有GBK字符集中的字符),
      但是兩者對同一個字符的編碼是不一樣的。如圖所示,GBK中“漢字”這兩個字符所包含的字節(Bytes)在UTF-8字符集中都表示不可見字符。
      所以,其顯示結果是不正確的。
      5,把控制臺代碼頁設置為936,其對應的字符集為GB2312。
      注意,由于本次實驗的環境為英文系統,故而需要設置命令行窗口的字體。不然,無法正確顯示中文字符。


      如圖所示,其查詢結果是正確的。
      實驗說明:
      盡管GBK字符集是GB2312字符集的超集,其比GB2312字符集包含更多的字符。
      但是GBK字符集向前兼容GB2312字符集?!皾h字”這兩個字符在GBK和GB2312字符集中的編碼完全相同,所以查詢能夠正確顯示。
      實驗結論:
      1,NLS_LANG環境變量中所指定的字符集其實就是數據庫客戶端應用程序所使用的字符集。
      如果客戶端應用程序不支持NLS_LANG中所包含的字符集或者所支持的字符集與NLS_LANG中的字符集不兼容,則會出現亂碼。
      2,此外,即使客戶端字符集和數據庫字符集相同,也可能會出現亂碼。
      假如,Oracle數據庫為AL32UTF8字符集,客戶端使用UTF-8字符集。
      然而,現實情況總是很復雜的。如果客戶端和數據庫所支持的UNICODE標準不一樣,則在很罕見的情況下仍有可能出現亂碼。

      實驗二:
      此實驗舉例說明數據庫不支持客戶端字符集所包含的字符時會產生什么樣的結果。
      1,創建一個使用WE8MSWIN1252字符集的數據庫。
      本次實驗創建了一個名為TALRASHA的數據庫,其使用WE8MSWIN1252字符集。
      以下是通過NLS_DATABASE_PARAMETERS視圖所查詢到的數據庫NLS參數。

      2,設置客戶端系統的NLS_LANG環境變量

      3,插入并查詢數據
      由于需要存儲中文字符,故此處將代碼頁設置為936。

      實驗說明:
      如上圖所示,由于數據庫字符集為WE8MSWIN1252,其不能正確地存儲中文字符,但可以正確存儲英文字符。
      所以,查詢結果中,中文為亂碼,英文正常顯示。
      實驗結論:
      1,如果客戶端應用程序所使用的字符集是數據庫字符集的超集,或者客戶端應用程序中的某些字符不在數據庫字符集所表示的范圍之內,則數據庫在進行字符集轉換時會產生錯誤的結果。
      2,屬于客戶端字符集和數據庫字符集交集中的字符能夠正常存儲和顯示。

      最終結論:
      1,在查詢數據時,客戶端字符集應該等于數據庫字符集或者是數據庫字符集的超集。從而避免顯示結果出現亂碼的問題。
      2,在數據輸入時,客戶端字符集應該等于數據庫字符集或者是數據庫字符集的子集。從而使得輸入字符能夠在數據庫中正確地保存。
      3,在創建數據庫時,盡可能使用UNICODE字符集,從而避免字符數據不能正確存儲的問題。

      五,舉例說明一些特殊情況
      通過以上兩個實驗基本說明了客戶端應用程序字符集,客戶端系統的NLS_LANG所包含的字符集和Oracle數據庫字符集三者之間的關系。
      但是,某些數據庫客戶端應用程序有自己獨立的客戶端環境配置,其不依賴于客戶端系統中的NLS環境變量或者依僅賴于某些系統環境變量。
      例如,PL/SQL DeveloperSQL Developer。它們的編輯器有自己的字符集和字體的設置,同時這兩個軟件也支持一些其他設置(如日期格式或者地區等)。
      所以,在進行第四部分的試驗一時,建議先通過這兩個應用程序插入數據。
      此外,還需要注意字體對數據顯示的影響。有的字體不能正確地顯示輸入或查詢結果中的字符也會產生問題。

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發表

        請遵守用戶 評論公約

        類似文章 更多

        主站蜘蛛池模板: 亚洲AV无码精品色午夜果冻| 亚洲国产成人精品女人久久久| 亚洲AV少妇熟女猛男| 又大又粗欧美成人网站| 国产亚洲色视频在线| 青青国产揄拍视频| 人妻少妇精品久久久久久| 亚洲av成人免费在线| 精品人人妻人人澡人人爽人人| a级黑人大硬长爽猛出猛进| 免费人成网站免费看视频| 精品无码一区二区三区在线| 精品国产成人午夜福利| AV无码国产在线看免费网站 | 久久精品99国产精品日本| 亚洲日韩久热中文字幕| 夜夜添狠狠添高潮出水| 国产AV无码专区亚洲AV毛片搜| 婷婷综合久久中文字幕蜜桃三电影| 成人网站网址导航| 中文字幕人妻无码一夲道| 饥渴的少妇2中文字幕| 亚欧美日韩香蕉在线播放视频| 成年女人免费碰碰视频| 成人免费看片又大又黄| 午夜在线观看免费观看 视频| 国产精品高清中文字幕| 免费观看的AV毛片的网站| 亚洲国产无套无码AV电影| 老司机精品成人无码AV| 国产V亚洲V天堂无码久久久 | 又粗又紧又湿又爽的视频| 老司机免费的精品视频| 国产玩具酱一区二区三区| 2020国产激情视频在线观看| 丰满少妇2中文在线观看| 精品无码三级在线观看视频| 韩国免费a级毛片久久| 深夜av在线免费观看| 欧美视频专区一二在线观看| 久久久久久亚洲精品成人|