Oracle字串資料型別簡述

weixin_34138377發表於2019-01-17

去 IOE 的前提是瞭解,才能談去。Oracle 提供了22種資料型別,其中專門用於儲存字串的有6類。

字串相關資料型別一覽

  • CHAR : 定長型別,用 空格 來填充保證達到最大的長度;最多儲存 2000 位元組資訊。
  • NCHAR : 與 CHAR 的差異是,支援 Unicode 格式的資料。
  • VARCHAR2 : 即 VARCHAR,變長型別,末尾不填充 空格 ;最多 4000 位元組。(12c 後,可支援32767位元組)
  • NVARCHAR2 : 與 VARCHAR2的差異是,支援 Unicode 格式的資料。
  • RAW : 變長的二進位制資料型別,不會發生資料字符集轉換;最多 2000 位元組。(12c 後,可支援32767位元組)
  • CLOB :10g後支援最多儲存 (4GB-1)×(資料庫塊大小) 位元組;受字符集轉換的影響。

字串語法

型別 <SIZE> 的說明 示例
VARCHAR2( <SIZE><BYTE|CHAR> ) 位元組或字元數,值域(1-4000),整數。 A VARCHAR2( 20 BYTE )
CHAR( <SIZE><BYTE|CHAR> ) 位元組或字元數,值域(1-2000),整數。 A CHAR( 20 CHAR )
NVARCHAR2( <SIZE> ) 字元數,值域 >0,上限與字符集有關,整數。 A NVARCHAR2( 20 )
NCHAR2( <SIZE> ) 字元數,值域 >0,上限與字符集有關,整數。 A NCHAR2( 20 )

字串的儲存

CHAR、 VARCHAR2、 NCHAR、 NVARCHAR2都採用相同的儲存格式.即 CHAR、NCHAR 實際是基於VARCHAR2、NVARCHAR2實現。

底層資料格式設計

  • 資料塊中,分為2部分
    • 資料長度:1-3個位元組
    • 資料本身
  • 資料長度的設計
    • 空資料即 NULL:單位元組值 0xFF
    • 長度≤ 250:單位元組值 0x01-0xFA
    • 長度>250:3位元組值表示
      • 第1標誌位元組固定為:0xFE
      • 第2、3位元組為實際長度

示例

  • VARCHAR(20) Hello World
<- ->
11 H e l l o W o r l d
長度
  • CHAR(80) Hello World
<- ->
80 H e l l o W o r l d
長度 69個空格

注意點

  • CHAR、NCHAR 空間效率利用率低,因佔用空間與資料無關,僅於列定義有關。
  • CHAR、NCHAR 容易給應用帶來混亂,因資料末尾會補充若干空格,導致搜尋結果經常非預期。
  • 設定 MAX_STRING_SIZE為 EXTENDED後,VARCHAR2,NVARCHAR2,RAW才可以支援32767位元組的儲存。Oracle 預設是關閉,因啟用後想再返回 STANDARD 會很痛苦。

查詢工具推薦: DUMP 函式

作用:顯示某個資料的資料型別程式碼、長度(單位為位元組)及其在資料庫內部實際儲存的形式(字符集名),語法為:

DUMP( expression [, return_format] [, start_position] [,length])

擴充套件

  • 關於字符集,請搜尋 NLS(National Language Support)相關資料。

相關文章