国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

[Oracle] 徹底搞懂Oracle字符集

2020-07-26 14:24:27
字體:
來源:轉載
供稿:網友

基本概念
字符集(Character set):
是一個系統支持的所有抽象字符的集合。字符是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。常見的字符集有ASCII,ZHS16GB231280,ZHS16GBK等。

字符編碼(Character Encoding):
是一套法則,使用該法則能夠對自然語言的字符的一個集合(如字母表或音節表),與其它的一個集合(如電腦編碼)進行配對。即在符號集合與數字系統之間建立對應關系。與字符集相對應,常見的字符編碼有:ASCii,ZHS16GBK,ZHT16BIG5,ZHS32GB18030等。
字符集的定義其實就是字符的集合,而字符編碼則是指怎么將這些字符變成字節用于保存、讀取和傳輸。

萬國碼(Unicode):包含了幾乎人類所有可用的字符,每年還在不斷的增加,可以看作是一種通用的字符集。它將全世界所有的字符統一化,統一編碼,不會再出現字符不兼容和字符轉換的問題。
它有以下三種編碼方式:
1.UTF-32編碼:
固定使用4個字節來表示一個字符,存在空間利用效率的問題。
2.UTF-16編碼:對相對常用的60000余個字符使用兩個字節進行編碼,其余的使用4字節。
3.UTF- 8編碼:兼容ASCII編碼;拉丁文、希臘文等使用兩個字節;包括漢字在內的其它常用字符使用三個字節;剩下的極少使用的字符使用四個字節。

Oracle字符集基本原理
在搞懂Oracle字符集基本原理之前,一定要先分清以下三個概念:
1. Oracle數據庫服務器字符集:即Oracle以哪種字符編碼存儲字符,可以通過以下語句查出數據庫字符集的設置。

復制代碼 代碼如下:

SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
PARAMETER                      VALUE
------------------------------ -----------------
NLS_CHARACTERSET               AL32UTF8

2. 客戶端操作系統字符集:即客戶端操作系統以哪種字符編碼存儲字符。
如果是Windows,可以使用chcp命令獲得代碼頁(code page):
復制代碼 代碼如下:

C:/Users/xianzhu>chcp
Active code page: 936

根據該代碼頁,到微軟的官方文檔《National Language Support (NLS) API Reference》找到其對應的字符集。
如果是Linux,字符集在/etc/sysconfig/i18n設置:
復制代碼 代碼如下:

LANG="zh_CN.GB2312" (指定當前操作系統的字符集)
SUPPORTED="zh_CN.GB2312"(指定當前操作系統支持的字符集)
SYSFONT="lat0-sun16"(指定當前操作系統的字體)

3. 客戶端NLS_LANG參數:該參數用于向Oracle指示客戶端操作系統的字符集。
有了以上3個基本概念之后,我來闡述一下Oracle字符集轉換的基本原則:
1.設置客戶端的NLS_LANG為客戶端操作系統的字符集
2.如果數據庫字符集等于NLS_LANG,數據庫和客戶端傳輸字符時不作任何轉換
3.如果它們倆不等,則需要在不同字符集間轉換,只有客戶端操作系統字符集是數據庫字符集子集的基礎上才能正確轉換,否則會出現亂碼。
幾種常見情況分析
下面先看一個例子,再透過現象看本質,我們會針對這個例子進行分析。
該例子如下:
復制代碼 代碼如下:

1. 數據庫字符集為Unicode(UTF-8編碼)
我們的數據庫版本是10.2.0.4.0,數據庫字符集是:
SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
PARAMETER                                VALUE
---------------------------------------- ------------------------------
NLS_CHARACTERSET               AL32UTF8
2. 客戶端操作系統字符集為代碼頁936(字符集為ZHS16GBK)
可以使用chcp獲得windows的代碼頁(code page)
C:/Documents and Settings/a105024/Desktop>chcp
Active code page: 936
3. 創建測試表
SQL> create table test(id number,var varchar2(30));
Table created.
4. 插入數據
這里在同一個操作系統啟動兩個session,session1的NLS_LANG設為和數據庫字符集一樣(即AL32UTF8):
C:/Documents and Settings/a105024/Desktop>set nls_lang=Simplified Chinese_China.AL32UTF8
連接數據庫并插入一條數據:
Session_1>insert into test values(1,'中國');
1 row created.
Session_1>commit;
Commit complete.
session2的NLS_LANG設為和客戶端操作系統一樣(即ZHS16GBK):
C:/Documents and Settings/a105024/Desktop>set nls_lang=Simplified Chinese_China.ZHS16GBK
連接數據庫并插入一條數據:
Session_2>insert into test values(2,'中國');
1 row created.
Session_2>commit;
Commit complete.
5. 執行查詢
在session 1上執行查詢:
Session_1>select * from test;
        ID VAR
---------- ---------------------
         1 中國
         2 涓   主站蜘蛛池模板: 墨玉县| 娄底市| 正定县| 伊金霍洛旗| 房山区| 疏勒县| 阳山县| 宽甸| 修武县| 商南县| 德令哈市| 屯昌县| 和政县| 崇阳县| 都昌县| 宁津县| 麻城市| 渝北区| 宜黄县| 兴城市| 大理市| 金溪县| 凯里市| 葫芦岛市| 九江县| 新田县| 武威市| 桦南县| SHOW| 兰州市| 宣汉县| 夏河县| 嘉禾县| 永新县| 疏附县| 凤阳县| 松潘县| 临潭县| 重庆市| 湄潭县| 寻乌县|