一。ORACLE字元編碼方案
1.單一位元組字元集:
在單一位元組字元集中,每個字元只佔一個位元組。單位元組7 位編碼方案最多可以定義128 (2^7) 個字元;單位元組8 位編碼方案最多可以定義256 (2^8) 個字元。
單位元組方案樣本:
7 位字元集:美國7 位ASCII 碼(US7ASCII)8 位字元集: 西歐ISO 8859-1 碼(WE8ISO8859P1) 西歐8 位EBCDIC 字碼頁500 碼(WE8EBCDIC500) 西歐8 位DEC 碼(WE8DEC)
2.寬度固定的多位元組字元集
除了每個字元採用位元組數固定的格式外,寬度固定的多位元組字元集同多位元組字元集提供的支援類似。這提供了每個字元具有統一位元組長度標記法的好處。Oracle 僅支援一個寬度固定的多位元組字元集,且該字元集只位於國家字元集AL16UTF16 中。
寬度固定的多位元組字元集樣本:AL16UTF16、16 位Unicode(寬度固定的雙位元組Unicode)
3.寬度可變的多位元組字元集
在寬度可變的多位元組字元集中,每個字元以一個或多個位元組表示。多位元組字元集通常用於支援亞洲語言。有些多位元組編碼方案使用最有效位值來表明,一個位元組是表示單個位元組還是作為代表一個字元的一系列位元組中的一部分。然而,其它字元編碼方案可以區分單位元組和多位元組字元。在碰到移入代碼之前,由裝置發出的移出控制碼表明後面的位元組都是雙位元組字元。
寬度可變的多位元組方案樣本:日文擴充UNIX 代碼(JEUC);中文GB2312-80 (CGB2312-80);AL32UTF8 (UTF-8)
4.Unicode 字元集
Unicode 是一種全球字元編碼標準,可以表示電腦中使用的所有字元,包括技術符號和出版用的字元。Unicode 標準3.0 版包含49,149 個字元,容量超過一百多萬個字元。Unicode 全套字元可以用不同的編碼格式表示。UTF-16(通用字元集轉換格式)是一種寬度固定的雙位元組格式;而UTF-8 是一種寬度可變的多位元組格式。
Oracle 提供AL32UTF8、UTF8 和UTFE 作為資料庫字元集,同時提供AL16UTF16 和UTF8 作為國家字元集。基於UTF-8 的字元集的優點是它們包括使用相同單位元組編碼的ASCII。UTF8 是ASCII 的超集,因此,從基於ASCII 的字元集升級到Unicode 時,資料庫字元集的移植會變得更加簡單。
二。資料庫字元集和國家字元集
資料庫字元集 |
國家字元集 |
在建立時定義 |
在建立時定義 |
除非重新建立,否則無法更改 |
除非重新建立,否則無法更改 |
用來儲存CHAR, VARCHAR2, CLOB, LONG等類型資料 |
儲存類型為NCHAR、NVARCHAR2、NCLOB的資料列 |
用來標示諸如表名、列名以及PL/SQL變數等 |
國家字元集實質上是為oracle選擇的附加字元集,主要作用是為了增強oracle的字元處理能力,因為NCHAR資料類型可以提供對亞洲使用定長多位元組編碼 的支援,而資料庫字元集則不能 |
可以儲存寬度可變的字元集 |
可以採用AL16UTF16 或UTF8 格式儲存Unicode |
三.字元集的相關參數NLS_
3.1NLS相關字典視圖
- NLS_DATABASE_PARAMETERS: 顯示資料庫當前NLS參數取值,包括資料庫字元集取值
- NLS_SESSION_PARAMETERS: 顯示由NLS_LANG 設定的參數,或經過alter session 改變後的參數值(不包括由NLS_LANG 設定的用戶端字元集)
- NLS_INSTANCE_PARAMETE: 顯示由參數檔案init<SID>.ora 定義的參數
- V$NLS_PARAMETERS: 顯示資料庫當前NLS參數取值
3.2修改NLS參數:
- 修改執行個體啟動時使用的初始化參數檔案
- 修改環境變數NLS_LANG。
- 使用ALTER SESSION語句,在oracle會話中修改
- 使用某些SQL函數
NLS作用優先順序別:Sql function > alter session > 環境變數或註冊表 > 參數檔案 > 資料庫預設參數
3.3 NLS_LANG格式 : NLS_LANG = <language>_<territory>.<client character set>
Language: 顯示oracle訊息,校正,日期命名
Territory:指定預設日期、數字、貨幣等格式
Client character set:指定用戶端將使用的字元集
註:視圖NLS_DATABASE_PARAMETERS
修改NLS參數樣本:
1 --以 ALTER SESSION 為例: 2 --查看當前會話參數 3 SQL> select * from nls_session_parameters; 4 5 PARAMETER VALUE 6 ------------------------------ -------------------- 7 NLS_LANGUAGE AMERICAN 8 NLS_TERRITORY AMERICA 9 NLS_CURRENCY $10 NLS_ISO_CURRENCY AMERICA11 NLS_NUMERIC_CHARACTERS .,12 NLS_CALENDAR GREGORIAN13 NLS_DATE_FORMAT DD-MON-RR14 NLS_DATE_LANGUAGE AMERICAN15 NLS_SORT BINARY16 NLS_TIME_FORMAT HH.MI.SSXFF AM17 NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXF18 19 PARAMETER VALUE20 ------------------------------ --------------------21 F AM22 23 NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR24 NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXF25 F AM TZR26 27 NLS_DUAL_CURRENCY $28 NLS_COMP BINARY29 NLS_LENGTH_SEMANTICS BYTE30 NLS_NCHAR_CONV_EXCP FALSE31 32 17 rows selected
1 --查看時間格式2 SQL> select last_name,hire_date from hr.employees;3 4 LAST_NAME HIRE_DATE5 ------------------------- ---------6 King 17-JUN-877 Kochhar 21-SEP-898 De Haan 13-JAN-93
1 --改變NLS_LANGUAGE 參數 2 SQL> alter session set NLS_LANGUAGE=Italian; 3 4 Session altered. 5 6 --產看改變參數後的時間格式 7 SQL> select last_name,hire_date from hr.employees; 8 9 LAST_NAME HIRE_DATE10 ------------------------- ---------11 King 17-GIU-8712 Kochhar 21-SET-8913 De Haan
--其時間格式發生變化