oracle字符集問題總結

在進行web開發和oracle安裝的過程當中常常有人對字符集搞不清楚,所以對此作一下總結。web

1.第一個問題:字符集之間的區別是什麼呢?數據庫

  常見的字符集有:UTF-8和GBK瀏覽器

  (1)GBK字符集服務器

  • GBK的文字編碼是雙字節來表示的,即不論中、英文字符均使用雙字節來表示,只不過爲區分中文,將其最高位都定成1。
  • GBK包含所有中文字符;
  • GBK是在國家標準GB2312基礎上擴容後兼容GB2312的標準(好像還不是國家標準)
  • GBK是國家編碼,通用性比UTF8差,不過UTF8佔用的數據庫比GBK大~

  (2)UTF-8字符集oracle

  •   UTF-8編碼則是用以解決國際上字符的一種多字節編碼,它對英文使用8位(即一個字節),中文使用24位(三個字節)來編碼。對於英文字符較多的論壇則用UTF-8節省空間。
  • UTF-8則包含全世界全部國家須要用到的字符。
  • UTF-8編碼的文字能夠在各國各類支持UTF8字符集的瀏覽器上顯示。好比,若是是UTF8編碼,則在外國人的英文IE上也能顯示中文,而無需他們下載IE的中文語言支持包。 因此,對於英文比較多的論壇 ,使用GBK則每一個字符佔用2個字節,而使用UTF-8英文卻只佔一個字節。
  • UTF8是國際編碼,它的通用性比較好,外國人也能夠瀏覽論壇

通常來講,國內的系統若是要保存漢字,通常會選擇使用GBK字符集,若是是想作網站等,全球可訪問的系統,那麼通常選擇UTF-8。網站

2.數據庫中哪些字符集須要設置?編碼

數據庫分客戶端字符集數據庫服務器字符集spa

而oracle的服務器字符集又有兩種:常規字符集(通常意義上的數據庫字符集)和國家字符集.net

1. 常規意義上的字符集(通常意義上的數據庫字符集):code

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

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

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

    (4)通常爲:AL32UTF8 或者 ZHS16GBK

2. 國家字符集:

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

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

 

3.字符集查看方法

數據庫字符集:select * from nls_database_parameters;

客戶端字符集:select * from nls_instance_parameters;

 

數據庫字符集的表示方式爲:

SIMPLIFIED CHINESE_CHINA.AL32UTF8

SIMPLIFIED CHINESE_CHINA.ZHS16GBK

 

若是客戶端字符集和數據庫字符集不一致時,經過plSql登錄時會提示以下錯誤:

image

 

4.客戶端字符集設置方法

    32位客戶端:  HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\

    64位客戶端:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1

 

5.建議的字符集是什麼?

   數據庫字符集:SIMPLIFIED CHINESE_CHINA.ZHS16GBK(國內大部分數據庫仍是oracle多,若是作網站的話仍是建議使用UTF-8字符集)

   國家字符集:SIMPLIFIED CHINESE_CHINA.AL16UTF16

   客戶端字符集:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

   網頁字符集:UTF-8

 

通過實驗,不會出現亂碼。

 

參考文章:

1. oracle 字符集查看與修改

做者: sdjnzqr
出處: http://www.cnblogs.com/sdjnzqr/ 版權:本文版權歸做者和博客園共有 轉載:歡迎轉載,但未經做者贊成,必須保留此段聲明;必須在文章中給出原文鏈接;不然必究法律責任
相關文章
相關標籤/搜索