oracle字符集理解

發表于:2013-10-15來源:IT博客大學習作者:rethink點擊數: 標簽:oracle
ORACLE數據庫字符集,即Oracle全球化支持(Globalization Support),或即國家語言支持(NLS)其作用是用本國語言和格式來存儲、處理和檢索數據。

  oracle字符集理解:

  一.引言

  ORACLE數據庫字符集,即Oracle全球化支持(Globalization Support),或即國家語言支持(NLS)其作用是用本國語言和格式來存儲、處理和檢索數據。利用全球化支持,ORACLE為用戶提供自己熟悉的數據庫母語環境,諸如日期格式、數字格式和存儲序列等。Oracle可以支持多種語言及字符集,其中oracle8i支持48種語言、76個國家地域、229種字符集,而oracle9i則支持57種語言、88個國家地域、235種字符集。由于oracle字符集種類多,且在存儲、檢索、遷移oracle數據時多個環節與字符集的設置密切相關,因此在實際的應用中,數據庫開發和管理人員經常會遇到有關oracle字符集方面的問題。本文通過以下幾個方面闡述,對oracle字符集做簡要分析

  二.字符集基本知識

  2.1字符集

  實質就是按照一定的字符編碼方案,對一組特定的符號,分別賦予不同數值編碼的集合。Oracle數據庫最早支持的編碼方案是US7ASCII。

  Oracle的字符集命名遵循以下命名規則:

  即: <語言><比特位數><編碼>

  比如: ZHS16GBK表示采用GBK編碼格式、16位(兩個字節)簡體中文字符集

  2.2字符編碼方案

  2.2.1 單字節編碼

  (1)單字節7位字符集,可以定義128個字符,最常用的字符集為US7ASCII

  (2)單字節8位字符集,可以定義256個字符,適合于歐洲大部分國家

  例如:WE8ISO8859P1(西歐、8位、ISO標準8859P1編碼)

  2.2.2 多字節編碼

  (1)變長多字節編碼

  某些字符用一個字節表示,其它字符用兩個或多個字符表示,變長多字節編碼常用于對亞洲語言的支持, 例如日語、漢語、印地語等

  例如:AL32UTF8(其中AL代表ALL,指適用于所有語言)、zhs16cgb231280

  (2)定長多字節編碼

  每一個字符都使用固定長度字節的編碼方案,目前oracle唯一支持的定長多字節編碼是AF16UTF16,也是僅用于國家字符集

  2.2.3 unicode編碼

  Unicode是一個涵蓋了目前全世界使用的所有已知字符的單一編碼方案,也就是說Unicode為每一個字符提供唯一的編碼。UTF-16是unicode的16位編碼方式,是一種定長多字節編碼,用2個字節表示一個unicode字符,AF16UTF16是UTF-16編碼字符集。

  UTF-8是unicode的8位編碼方式,是一種變長多字節編碼,這種編碼可以用1、2、3個字節表示一個unicode字符,AL32UTF8,UTF8、UTFE是UTF-8編碼字符集

  2.3 字符集超級

  當一種字符集(字符集A)的編碼數值包含所有另一種字符集(字符集B)的編碼數值,并且兩種字符集相同編碼數值代表相同的字符時,則字符集A是字符集B的超級,或稱字符集B是字符集A的子集。

  Oracle8i和oracle9i官方文檔資料中備有子集-超級對照表(subset-superset pairs),例如:WE8ISO8859P1是WE8MSWIN1252的子集。由于US7ASCII是最早的Oracle數據庫編碼格式,因此有許多字符集是US7ASCII的超集,例如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集。

  2.4 數據庫字符集(oracle服務器端字符集)

  數據庫字符集在創建數據庫時指定,在創建后通常不能更改。在創建數據庫時,可以指定字符集(CHARACTER SET)和國家字符集(NATIONAL CHARACTER SET)。

  2.4.1字符集

  (1)用來存儲CHAR, VARCHAR2, CLOB, LONG等類型數據

  (2)用來標示諸如表名、列名以及PL/SQL變量等

  (3)用來存儲SQL和PL/SQL程序單元等

  2.4.2國家字符集:

  (1)用以存儲NCHAR, NVARCHAR2, NCLOB等類型數據

  (2)國家字符集實質上是為oracle選擇的附加字符集,主要作用是為了增強oracle的字符處理能力,因為NCHAR數據類型可以提供對亞洲使用定長多字節編碼的支持,而數據庫字符集則不能。國家字符集在oracle9i中進行了重新定義,只能在unicode編碼中的AF16UTF16和UTF8中選擇,默認值是AF16UTF16

  2.4.3查詢字符集參數

  可以查詢以下數據字典或視圖查看字符集設置情況

  nls_database_parameters、props$、v$nls_parameters

  查詢結果中NLS_CHARACTERSET表示字符集,NLS_NCHAR_CHARACTERSET表示國家字符集

  2.4.4修改數據庫字符集

  按照上文所說,數據庫字符集在創建后原則上不能更改。如果需要修改字符集,通常需要導出數據庫數據,重建數據庫,再導入數據庫數據的方式來轉換,或通過ALTER DATABASE CHARACTER SET語句修改字符集,但創建數據庫后修改字符集是有限制的,只有新的字符集是當前字符集的超集時才能修改數據庫字符集,例如UTF8是US7ASCII的超集,修改數據庫字符集可使用ALTER DATABASE CHARACTER SET UTF8。正確的修改方法如下:

  $sqlplus /nolog

  SQL>conn / as sysdba;

  若此時數據庫服務器已啟動,則先執行SHUTDOWN IMMEDIATE命令關閉數據庫服務器,然后執行以下命令:

  SQL>STARTUP MOUNT;

  SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

  SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

  SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

  SQL>ALTER DATABASE OPEN;

  SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;

  SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;

  SQL>SHUTDOWN IMMEDIATE;

  SQL>STARTUP

  2.5 客戶端字符集(NLS_LANG參數)

  2.5.1客戶端字符集含義

  客戶端字符集定義了客戶端字符數據的編碼方式,任何發自或發往客戶端的字符數據均使用客戶端定義的字符集編碼,客戶端可以看作是能與數據庫直接連接的各種應用,例如sqlplus,exp/imp等??蛻舳俗址峭ㄟ^設置NLS_LANG參數來設定的。

  2.5.2 NLS_LANG參數格式

  NLS_LANG=_.

原文轉自:http://blogread.cn/it/article/4654

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97