手機版
你好,游客 登錄 注冊
背景:
閱讀新聞

Oracle字符與字節的整理

[日期:2019-09-16] 來源:Linux社區  作者:零度的雨1205 [字體: ]

平時工作中,偶爾會有關于Oracle字符與字節的困惑,今天閑暇之余,特意整理一下。

術語: 

位(bit):是計算機 內部數據 儲存的最小單位,11001100是一個八位二進制數。 

字節(byte):是計算機中 數據處理 的基本單位,習慣上用大寫  B  來表示,1B(byte,字節)= 8bit(位) 

字符:是指計算機中使用的字母、數字、字和符號 

說明:  

在Oracle中,NVARCHAR2、NCHAR使用的是國家字符集(NLS_NCHAR_CHARACTERSET),同時國家字符集必須 

 為AL16UTF16、UTF8兩個中的一個;其他的字符類型使用的是  標準字符集(NLS_CHARACTERSET),例如該庫的字符集查詢  如下:

測試

(1) 首先在  數據庫字符集為  ZHS16GBK,國家字符集為  UTF8進行測試: 

建一張測試表并插入數據 :

create table t_var(va nvarchar2(32),vb varchar2(32)); 

insert into t_var values('你好','你好'); 

insert into t_var values('hello','hello'); 

此時我們查詢: 

測試結果:

a. 當字符類型使用標準  字符集為  ZHS16GBK時,  一個英文字符占一個字節,一個中文字符占兩個字節; 

b. 當  字符類型使用  國家字符集為  UTF8時,  一個英文字符占一個字節,一個中文字符占三個字節; 

(2) 然后我們在另一個庫標準字符集為 ZHS16GBK,國家字符集為AL16UTF16時,再進行以上相同的測試: 

測試結果:

a.  當字符類型使用標準  字符集為  ZHS16GBK時,  一個英文字符占一個字節,一個中文字符占兩個字節; 

b. 當  字符類型使用  國家字符集為  AL16UTF16  時,一個  英文字符占兩個字節,一個中文字符占兩個字節;   

以上是一個簡單的測試過程,說明當我們當我們選擇不同的字符類型時,一個字符所占的字節是不一樣的,這可能會對我們使用一些字符處理的函數時造成影響。

此外,我們在日常工作中,也許看到過以下的字符長度定義的寫法:

varchar2(32)

varchar2(32 char)

varchar2(32 byte)

這三種定義方法都是正確的,只不過它表示的意思是不一樣的:

varchar2(32 char) :指定了字符串最大長度是32位,不管是中文還是英文,最大存儲長度是32位;

varchar2(32 byte) :指定了字符串所占的最長字節數為32,例如允許存儲中文最多16個,英文32個;

varchar2(32)  :未明確指定字符串最大長度的度量是以byte為準,還是以char為準,此時起決定作用的是

                          參數NLS_LENGTH_SEMANTICS;

在測試庫中查詢該參數如下:

可以看到數據庫默認的字符串長度的度量是BYTE。

更多Oracle相關信息見Oracle 專題頁面 http://www.vnrggh.live/topicnews.aspx?tid=12

Linux公社的RSS地址http://www.vnrggh.live/rssFeed.aspx

本文永久更新鏈接地址http://www.vnrggh.live/Linux/2019-09/160676.htm

linux
相關資訊       Oracle字符  Oracle字節 
本文評論   查看全部評論 (0)
表情: 表情 姓名: 字數

       

評論聲明
  • 尊重網上道德,遵守中華人民共和國的各項有關法律法規
  • 承擔一切因您的行為而直接或間接導致的民事或刑事法律責任
  • 本站管理人員有權保留或刪除其管轄留言中的任意內容
  • 本站有權在網站內轉載或引用您的評論
  • 參與本評論即表明您已經閱讀并接受上述條款
彩票平台