oracle 字符集總結(超出GBK範圍的字元存取問題未解決)
字符集總結:
一、伺服器的字符集(用來儲存資料用的編碼格式)
二、作業系統字符集(用來顯示、解碼/編碼與oracle互動的編碼格式)
三、oracle客戶端字符集(用於轉換作業系統、伺服器端編碼/解碼格式問題)
後續在使用過程中領悟到:
最基礎層是 資料庫(建立庫時的字符集)
第二層是:作業系統
第三層是:終端顯示
保持三層為 相同字符集 既可,但要注意的是,必須以建立資料庫時所使用的 字符集 為基準,進行設定 作業系統 、 終端的字符集,就基本沒有問題;
引用一段話:
字符集,實質就是按照一定的字元編碼方案,對一組特定的符號,分別賦予不同數值編碼的集合。Oracle資料庫最早支援的編碼方案是US7ASCII。Oracle的字符集命名遵循以下命名規則:<Language><bitsize><encoding> 即: <語言><位元位數><編碼> 。比如: AL32UTF8表示:AL,代表all,指使用所有語言;32,,32位;UTF8編碼。檢視環境變數發現:NLS_LANG=American_America.AL32UTF8,American表示語言;America表示地區;AL32UTF8字符集型別。
AL32UTF8和UTF8有什麼區別呢?Oracle的UTF8字符集由來已久,至少在8的時候就已經存在了,而對應的是UNICODE 3.0。而AL32UTF8字符集是9i才出現的,其對應的是UNICODE 5.0。這兩種字符集的區別在於,UNICODE 5.0與3.0相比,又增加了一些新的補充字元。但是在實際當中,使用到這些新增字元的可能性非常小,因此絕大部分情況下,選擇UTF8也是足夠的。AL32UTF8字符集是9i才出現的,那麼對於9i以後的版本訪問沒有任何問題,但是對於8i及以前的版本,則不認識這個字符集。這就使得8i及更低版本的客戶端在訪問9i以上AL32UTF8的資料庫時,會碰到各種各樣的問題。因此,如果資料庫版本都在9i及其以上,不需要考慮ORACLE8的資料庫,建議使用AL32UTF8字符集,它採用的Unicode標準要比UTF8採用的Unicode標準更新,支援的字元也更多一些。如果要考慮ORACLE8資料庫,建議使用UTF8字符集,它的相容性好,在ORACLE8及8I資料庫上使用AL32UTF8字符集容易出現問題。隨著現在版本11g逐漸開始稱為主流版本,8i客戶端的情況已經越來越少見了,因此在11.2的DBCA中,UTF8已經不是推薦字符集列表中的一員了。我們在遇到不相容的問題時就要修改字符集。
一、伺服器的字符集(用來儲存資料用的編碼格式)
編碼字符集包含關係:ZHS32GB18030 > ZHS16GBK > ZHS16CGB231280 參考文章:http://docs.oracle.com/cd/B10501_01/server.920/a96529/appa.htm#956722
oracle 支援的字符集:
在 oracle 官方文件中提到支援以下中文字符集:
ZHS16CGB231280 CGB2312-80 16-bit Simplified Chinese -- 11g 已不支援
ZHS16GBK GBK 16-bit Simplified Chinese
ZHS32GB18030 GB18030-2000 -- 11g 已不支援
ZHT16BIG5 BIG5 16-bit Traditional Chinese -- 11g 已不支援
ZHT32EUC EUC 32-bit Traditional Chinese
ZHT16HKSCS MS Windows Code Page 950 with Hong Kong Supplementary Character Set
ZHT16MSWIN950 MS Windows Code Page 950 Traditional Chinese
而我在11g建立 DB 時,選項中只支援以下幾種中文字符集:
ZHS16GBK GBK 16-bit Simplified Chinese -- 我們中國大陸只能選它了...
ZHT16HKSCS MS Windows Code Page 950 with Hong Kong Supplementary Character Set
ZHT16MSWIN950 MS Windows Code Page 950 Traditional Chinese
ZHT32EUC EUC 32-bit Traditional Chinese
AL32UTF8 Unicode 4.0 UTF-8 Universal character set -- 實驗時,使用的是字符集,證明可以儲存 ZHS16GBK 以外的字符集
二、作業系統字符集(用來顯示、解碼/編碼與oracle互動的編碼格式)
linux命令下:
locale -a -- 檢視作業系統支援哪些字符集;
locale charmap -- 看作業系統的字元解碼是哪種方式;
export LANG=zh_CN.UTF-8 -- 設定作業系統 為 中文,utf8編碼方式
三、oracle客戶端字符集(用於轉換作業系統、伺服器端編碼/解碼格式問題)
linux命令下:
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.AL32UTF8' -- 設定 語言:簡體中文 區域:中國 編碼:utf8
實驗:
測試字元(以下字元都不在GBK字元範圍內):
<由於這些字元不能釋出到CSDN,一發布,下面文章就沒有了,所以只能以圖片方式發了>
一、 gbk字符集的情況下
條件:
伺服器端oracle的字符集:ZHS16GBK
linux終端環境變數設定 LANG:export LANG="zh_CN.GB18030"
linux終端環境變數設定 NLS_LANG: export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS32GB18030"
CREATE TABLE TST_CHARACTER
(
F1 NVARCHAR2(8)
);
結果:
一、sqlplus中試驗
1. INSERT INTO TST_CHARACTER values(''); -- 成功
select * from TST_CHARACTER ; -- 失敗,亂碼;
F1
--------------------------------
??
select * from TST_CHARACTER where F1='' -- 查詢成功,但是亂碼;
二、P/L SQL Developer 8.0 版本試驗
1. select * from TST_CHARACTER for update; -- 使用把拷貝進去,成功顯示, 但是不能使用where 條件查詢;
select * from TST_CHARACTER where F1='' -- 查詢不成功;
select * from TST_CHARACTER -- 能顯示 '' 字
二、 AL32UTF8 字符集的情況下
條件:
伺服器端oracle的字符集: AL32UTF8
linux終端環境變數設定 LANG:export LANG="zh_CN.UTF-8"
linux終端環境變數設定 NLS_LANG: export NLS_LANG='SIMPLIFIED CHINESE_CHINA.AL32UTF8'
CREATE TABLE TST_CHARACTER
(
F1 NVARCHAR2(8)
);
結果:
一、sqlplus中試驗
SQL> INSERT INTO TST_CHARACTER values(''); -- 成功
SQL> select * from tst_character; -- 失敗,亂碼;
F1
--------------------------------
��
SQL> select * from TST_CHARACTER where F1='' ; -- 成功,但顯示為亂碼;
二、P/L SQL Developer 8.0 版本試驗
INSERT INTO TST_CHARACTER values('') ; -- 成功
commit;
select * from TST_CHARACTER -- 失敗,亂碼;
select * from TST_CHARACTER where F1='' for update; -- 成功找到資料,但顯示為亂碼;
直到現在,還沒有找到一種方法可以正確存入,並能條件查詢,並正確反顯的。。。。。。。。。
有時間再搞,得睡了。。。。。
以上如果有哪位大蝦能幫解決一下麼,謝謝啦 ~!~
相關推薦
oracle 字符集總結(超出GBK範圍的字元存取問題未解決)
字符集總結: 一、伺服器的字符集(用來儲存資料用的編碼格式) 二、作業系統字符集(用來顯示、解碼/編碼與oracle互動的編碼格式) 三、oracle客戶端字符集(用於轉換作業系統、伺服器端編碼/解碼格式問題) 後續在使用過程中領悟到: 最基礎層是 資料庫(建立庫時的字符
字符集問題(Unicode變為多位元組即能解決)
嚴重性 程式碼 說明 專案 檔案 行 禁止顯示狀態 錯誤 C2664 “void ATL::CStringT<wchar_t,StrTraitMFC<wchar_t,ATL::ChTraitsCRT<wchar
Oracle 技巧總結(一):行轉列 及 列裝行
1.行轉列 oracle中行轉列 語法結構select listagg(column1, ',') within group(order by column2) from X; 如下圖所示: listagg(attr1, attr2):第一個引數是要行轉列的那個欄位
Oracle學習總結(2)——Oracle資料庫設計總結(三大正規化)
一、實體與表對應關係 表<=>實體,欄位<=>屬性。 二、表與表的關係(實體間的關係):一對一、一對多、多對多 一對一:一條記錄只對應其他表中的一條記錄有關係 學生基本資訊表t_student,成績表t_studentScore含有一個外來
LeetCode 總結 (持續更新中。。。。)
總結 get ngs multiply log 。。 icu ble 更新 No. Name Acceptance Difficulty Star 43 Multiply Strings 27.3% medium 3.5 90 Subsets II 36.5%
2048遊戲回想二:算法總結(移動、合並、動畫等)
switch com asm isp error 結束 復雜 因此 playsound 假設僅僅是單純的寫一個2048遊戲。讓這個遊戲能夠玩的話,工作量還是蠻小的。只
【團隊作業總結】個人總結(從後端來看整個項目)
map exp 失效 undefined defined 用戶名 目的 color scores 團隊作業總結(byPB16061082耿子鋼): 本次項目做的是一個作業管理系統,包括教師端和學生端,主要功能簡單來說為教師通過教師端來上傳學生名單,發布作業,批改作業,管理作
LeetCode 總結(第1 7 9 13 14題)
1 兩數之和 class Solution: def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: L
oracle sql小結(主要講橫列轉換的例子)decode 以及case
--建表 create table kecheng( id NUMBER, name VARCHAR2(20), course VARCHAR2(20), score NUMBER); --插入資料insert into kecheng (id, name, course, score)values (1
linux解壓命令總結(zip,tar.gz tar.xz tar.lz)
tar & tar.gz tar -xvf abc.tar tar -xvf abc.tar.gz tar.lz lzip -dv abc.lz 得到 abc.tar 再繼續解壓 tar.xz(壓縮比牛逼啊,320M
陣列的去重方法總結(包括物件陣列的去重方法)
陣列的去除在真實專案中是非常的常用,那麼在這裡總結一下物件陣列及基本型別陣列的去重方法,主要利用了物件的鍵值是唯一的一個特性。 1:去重方法一利用陣列的索引對應的值。 let arr = [2,3,3,3,2,4,2]; console.log("arr is a instance of a
Liunx:環境基礎開發工具使用總結(基本操作命令及使用詳解)
目錄 1vim的基本概念 2vim的基本操作 3vim正常模式命令集 1:插入模式 2:移動游標 3:刪除文字 4:複製 5:替換 6:撤銷 7:更改 8:跳到指定行 4vim末行模式命令集 分屏操作 編譯器的使用 1:背景知識 2:g
二分法總結 (以後直接就是抄板子了!)
這兩天又碰到了用到了二分法的題,但是由於我之前學的不是很清楚,許多二分的題都是憑感覺寫出二分格式,然後WA之後憑感覺調整(竟然還能A過!!),因此再次碰到之後就感覺還是需要總結一下,要不然以後太浪費時間了。 我們用套路的方法來二分: 對於一個區間[l,r],滿足 迴圈不變式: &
vue總結(包括:指令的使用,axios)
一,axios的用法 1,配置: *引入axios *與APP.vue建立一個http-common.js檔案(使用axios模組,除錯埠)用來給其他模組複用 2,使用: *在其他元件檔案中匯入http元件 va
struts2+spring+hibernate框架總結(框架分析+環境搭建+例項原始碼下載)
首先,SSH不是一個框架,而是多個框架(struts+spring+hibernate)的整合,是目前較流行的一種Web應用程式開源整合框架,用於構建靈活、易於擴充套件的多層Web應用程式。 整合SSH框架的系統從職責上分為四層:表示層、業務邏輯層、資料持久層和域模組層(實體層)。 Struts
c++:深淺拷貝總結(深拷貝的傳統和現代寫法)
深淺拷貝區別: 淺拷貝只拷貝指標,但拷貝後兩個指標指向同一個記憶體空間; 深拷貝不但對指標進行拷貝,而且對指標指向的內容進行拷貝, 呼叫拷貝建構函式後,淺拷貝還有聯絡,深拷貝的兩個物件完全獨立。 淺拷貝類似於檔案建立快捷方式,而深拷貝好比檔案複製。 編譯器預設提供的
setprecision、fixed、showpoint的用法總結(經典!!超經典!!)
首先要加標頭檔案:iomanip 一:setprecision 作用:控制輸出流顯示浮點數的數字個數,setprecision(n)就是輸出的n個數,會有四捨五入。 比如:double s=20.7843000, cout<<setprecisio
VC工程從Win32環境往Win64環境遷移的經驗總結('static_cast' (UINT)' to 'void (__cdecl CWnd::* )(UINT_PTR)')
其次在工程屬性設定中作如下修改: 1. 在“C/C++”——“前處理器”中將WIN32改為_WIN64,並且放在最前面,這樣才確保連結的是64位的Windows SDK。 2. 在“連結器”——“高階”——“目標計算機”將“MachineX86(/MACHINE:X8
自考總結(網管、資料庫、軟工)
準備時間 從暑假開始三科自考的學習到考試前一週,每天基本是2-3小時時間學習,除了每週一天的假期。考試那一週基本上一天的投入是5-7小時吧。 各階段學習 第一階段:快速閱讀,巨集觀把控,畫整體思維導圖。
golang常用加密解密演算法總結(AES、DES、RSA、Sha1MD5)
在專案開發過程中,當操作一些使用者的隱私資訊,諸如密碼、帳戶金鑰等資料時,往往需要加密後可以在網上傳輸。這時,需要一些高效地、簡單易用的加密演算法加密資料,然後把加密後的資料存入資料庫或進行其他操作;當需要讀取資料時,把加密後的資料取出來,再通過演算法解密。 關於加密解密 當前我們專案中常用