【體繫結構,13】oracle的字元集詳解,oracle字元集

來源:互聯網
上載者:User

【體繫結構,13】oracle的字元集詳解,oracle字元集
一.字元集的簡單理解:字元集: 字元與編碼對應的表。 當軟體有字元集,就是使用自己的字元集,如果軟體沒有字元集就使用OS字元集。
二.字元集的使用場合:1.oracle有兩種字元集:資料庫字元集和國家字元集 。當安裝資料庫時選擇了這兩種字元集。                 資料庫字元集 的使用場合:(1)用來儲存CHAR, VARCHAR2, CLOB, LONG等類型資料(2)用來標示諸如表名、列名以及PL/SQL變數等(3)用來儲存SQL和PL/SQL程式單元等      國家字元集的使用場合:(1)用以儲存NCHAR, NVARCHAR2, NCLOB等類型資料



2.查看資料庫的字元集:
SQL> select * from nls_database_parameters;
PARAMETER                      VALUE------------------------------ ----------------------------------------NLS_LANGUAGE                   AMERICANNLS_TERRITORY                  AMERICANLS_CURRENCY                   $NLS_ISO_CURRENCY               AMERICANLS_NUMERIC_CHARACTERS         .,NLS_CHARACTERSET               WE8ISO8859P1     --資料庫字元集NLS_CALENDAR                   GREGORIANNLS_DATE_FORMAT                DD-MON-RRNLS_DATE_LANGUAGE              AMERICANNLS_SORT                       BINARYNLS_TIME_FORMAT                HH.MI.SSXFF AM
PARAMETER                      VALUE------------------------------ ----------------------------------------NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AMNLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZRNLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZRNLS_DUAL_CURRENCY              $NLS_COMP                       BINARYNLS_LENGTH_SEMANTICS           BYTENLS_NCHAR_CONV_EXCP            FALSENLS_NCHAR_CHARACTERSET         AL16UTF16    --國家字元集NLS_RDBMS_VERSION              10.2.0.1.0
20 rows selected.
三.字元集的命名:
Oracle的字元集命名遵循以下命名規則:<Language><bit size><encoding>即:  <語言><位元位元><編碼>比如: ZHS16GBK表示採用GBK編碼格式、16位(兩個位元組)簡體中文字元集常見字元集:US7ASCII          美國人常用的字元zhs16cgb231280     較老的中文字元集, 只針對中國人使用。AL32UTF8       是unicode最新字元集,比utf8字元集要多。一般選為資料庫字元集。AF16UTF16    國家字元集統一選AF16UTF16ZHS16GBK    較新的中文字元集, ZHS16GBK是zhs16cgb231280字元集的超集,但不是嚴格超集。utf8
2.查看oracle所有字元集
select * from V$NLS_VALID_VALUES;
3.查看OS的字元集: linux: locale,locale -a windows: chcp
四.用戶端OS字元集、NLS_LANG設定、伺服器端OS字元集、Oracle資料庫字元集:
1.用戶端軟體sqlplus沒有字元集, 使用的是作業系統的字元集。2.如果軟體有字元集,則作業系統字元集失效。所以oracle不會用作業系統的字元集。3.所有的字元集轉換都是在oracle端轉換的。4.主要流程:使用sqlplus輸入中文,使用作業系統字元集對中文進行編碼。然後傳到oracle。當oracle的字元集與用戶端的字元集不一致時,oracle要將編碼轉成字元,然後使用資料庫的字元集將字元重新編碼再儲存起來。5.oracle如何知道用戶端的字元集:oracle通過NLS_LANG參數知道用戶端的字元集。在用戶端設定NLS_LANG參數.設定用戶端的字元集:set NLS_LANG=american_america.zhs16gbk
6.如何設定字元集:
①.用戶端作業系統的字元集: 中文, UTF8.②.oracle字元集: 一般在建立資料庫時指定。③.用戶端NLS_LANG參數設定: 一定要與用戶端作業系統的字元集一致。
五.NLS_LANG的設定:一定要與用戶端作業系統的字元集一致1.設定格式:NLS_LANG=<language>_<territory>.<client character set>     Language:顯示oracle訊息,校正,日期命名    Territory:指定預設日期、數字、貨幣等格式    Client character set:指定用戶端將使用的字元集    例如:NLS_LANG=AMERICAN_AMERICA.US7ASCII      AMERICAN是語言,AMERICA是地區,US7ASCII是用戶端字元集


六.執行個體:查看資料的字元編碼# dump(name,1016):表示將name這一列以16進位直接顯示出來,10表示查詢結果中顯示CharacterSet。  select id, name , dump(name,1016) from t2;  #查看你好的字元編碼SQL> select dump('你好',1016) from dual;DUMP('你好',1016)-----------------------------------------------Typ=96 Len=4 CharacterSet=ZHS16GBK: c4,e3,ba,c3
#SQL> select dump('你好',16) from dual;
DUMP('你好',16)-------------------------Typ=96 Len=4: c4,e3,ba,c3



怎查詢Oracle的字元集

一、什麼是oracle字元集 Oracle字元集是一個位元組資料的解釋的符號集合,有大小之分,有相互的包容關係。ORACLE 支援國家語言的體繫結構允許你使用本地化語言來儲存,處理,檢索資料。它使資料庫工具,錯誤訊息,排序次序,日期,時間,貨幣,數字,和日曆自動適應本地化語言和平台。 影響oracle資料庫字元集最重要的參數是NLS_LANG參數。它的格式如下: NLS_LANG = language_territory.charset 它有三個組成部分(語言、地區和字元集),每個成分控制了NLS子集的特性。其中: Language 指定伺服器訊息的語言,territory 指定伺服器的日期和數字格式,charset 指定字元集。如:AMERICAN _ AMERICA. ZHS16GBK 從NLS_LANG的組成我們可以看出,真正影響資料庫字元集的其實是第三部分。所以兩個資料庫之間的字元集只要第三部分一樣就可以相互匯入匯出資料,前面影響的只是提示資訊是中文還是英文。 二、 很多人都碰到過因為字元集不同而使資料匯入失敗的情況。這涉及三方面的字元集,一是oracel server端的字元集,二是oracle client端的字元集;三是dmp檔案的字元集。在做資料匯入的時候,需要這三個字元集都一致才能正確匯入。 1、查詢oracle server端的字元集 有很多種方法可以查出oracle server端的字元集,比較直觀的查詢方法是以下這種:SQL>select userenv('language') from dual; 結果類似如下:AMERICAN _ AMERICA. ZHS16GBK
 
怎查看Oracle資料庫字元集,詳細操作,xx

資料庫伺服器字元集select * from nls_database_parameters,其來源於props$,是表示資料庫的字元集。
  
  用戶端字元集環境select * from nls_instance_parameters,其來源於v$parameter,
  
  表示用戶端的字元集的設定,可能是參數檔案,環境變數或者是註冊表
  
  會話字元集環境select * from nls_session_parameters,其來源於v$nls_parameters,表示會話自己的設定,可能是會話的環境變數或者是alter session完成,如果會話沒有特殊的設定,將與nls_instance_parameters一致。
  
  用戶端的字元集要求與伺服器一致,才能正確顯示資料庫的非Ascii字元。如果多個設定存在的時候,alter session>環境變數>註冊表>參數檔案
  
  字元集要求一致,但是語言設定卻可以不同,語言設定建議用英文。如字元集是zhs16gbk,則nls_lang可以是American_America.zhs16gbk。

涉及三方面的字元集,
1. oracel server端的字元集;
2. oracle client端的字元集;
3. dmp檔案的字元集。

在做資料匯入的時候,需要這三個字元集都一致才能正確匯入。

2.1 查詢oracle server端的字元集
有很多種方法可以查出oracle server端的字元集,比較直觀的查詢方法是以下這種:
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SQL>select userenv(‘language’) from dual;
AMERICAN _ AMERICA. ZHS16GBK

2.2 如何查詢dmp檔案的字元集
用oracle的exp工具匯出的dmp檔案也包含了字元集資訊,dmp檔案的第2和第3個位元組記錄了dmp檔案的字元集。如果dmp檔案不大,比如只有幾M或幾十M,可以用UltraEdit開啟(16進位方式),看第2第3個位元組的內容,如0354,然後用以下SQL查出它對應的字元集:
SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;
ZHS16GBK

如果dmp檔案很大,比如有2G以上(這也是最常見的情況),用文字編輯器開啟很慢或者完全打不開,可以用以下命令(在unix主機上):
cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然後用上述SQL也可以得到它對應的字元集。

2.3 查詢oracle client端的字元集
在windows平台下,就是註冊表裡面相應OracleHome的NLS_LANG。還可以在dos視窗裡面自己設定,
比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK
這樣就隻影響這個視窗裡面的環境變數。

在unix平台下,就是環境變數NLS_......餘下全文>>
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.