Db數據類型

在表中存儲數據時,不同類型的數據佔用的空間和存儲的方式都不相同。接下來,我們就簡單認識一下 DB2 中的各種數據類型(Data Type)。

DB2 主要分成兩類數據類型:內置的數據類型和用戶自定義的數據類型。本節只介紹內置類型,用戶自定義類型在 3.17.2 節介紹。

內置數據類型主要包括數值型、文本型、日期時間型和 XML 四大類。

3.11.1 數值型

數值型具體劃分如圖 3.19 所示。


圖 3.19 數值型數據的種類
 

SMALLINT 稱爲小整型或短整型,是兩個字節的整數,精度爲 5 位,其數據表示範圍從 -32,768 到 32,767。

INT 稱爲整型,也可以寫成 INTEGER,是四個字節的整數,精度爲 10 位,其數據表示範圍從 -2,147,483,648 到 2,147,483,647。

BIGINT 稱爲大整型或長整型,是八個字節的整數,精度爲 19 位,其數據表示範圍從 9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。

REAL 稱爲單精度浮點數,是實數的 32 位近似值。數字可以爲零,或者在從 -3.402E+38 到 -1.175E-37 或從 1.175E-37 到 3.402E+38 的範圍內。

DOUBLE 稱爲雙精度浮點數,是實數的 64 位近似值。數字可以爲零,或者在從 -1.79769E+308 到 -2.225E-307 或從 2.225E-307 到 1.79769E+308 的範圍內。

DECFLOAT 稱爲十進制浮點數,是 V9.5 中引入的新數據類型,適合於處理準確的十進制業務。它具有 DECIMAL 類型的準確性,同時又具有浮點數的性能優勢,特別適合於在處理貨幣值相關的應用程序中使用。

DECIMAL 稱爲十進制數,是一種可以自己定義小數位數的壓縮型十進制數,也可以寫成 DEC,NUMERIC 或者 NUM,定義這種類型的數據需要指定兩個參數:DECIMAL(p,s)。p 表示數字的總長度(不包括正負號和小數點),s 表示小數長度。

DECIMAL 類型的數據可以精確地表示指定精度的小數。它所佔用的存儲空間與第一個參數,即數字的總長度有關,計算公式爲:tranc(p/2)+1。其中 tranc 表示截取整數部分。

3.11.2 字符型

字符型具體劃分如 3.20 所示。


圖 3.20 字符型數據的種類
 

CHAR 稱爲定長字符串,需要指定長度,如 CHAR(10)。也可以寫成 CHARACTER( 長度 )。定長字符串的長度介於 1 到 254 字節之間。如果沒有指定長度,那麼就認爲是 1 個字節。

VARCHAR 稱爲變長字符串,需要指定最大長度,如 VARCHAR(20)。變長字符串長度的最大值是 32672。存儲變長字符串時,需要額外花費 4 個字節來記錄字符串的實際長度。所以,如果指定了 VARCHAR(20),每個這種類型的數據在硬盤上實際要佔用 20+4=24 個字節的空間。

需要注意的是,對於變長字符串的實際佔用存儲空間量還有一個限制:數據必須適合放在單個表空間頁面上。也就是說,對於使用 4K 頁表空間的表,長度不能超過 4 × 1024-4=4092 字節;對於 8K 頁表空間的表,長度不能超過 8 × 1024-4=8188 字節;對於 16K 頁表空間的表,長度不能超過 16 × 1024-4=16380 字節;對於 32K 頁表空間的表,長度不能超過 32 × 1024-4=32764 字節,但是該數超過了 VARCHAR 的最大長度 32672,所以對於 32K 頁表空間的表,最大能夠存放 32672 字節。默認情況下表空間爲 4K,所以要使用 VARCHAR 類型來存儲超過 4092 字節的數據,就需要顯式創建更大頁大小的表空間。

LONG VARCHAR 稱爲大型變長字符串,不需要指定最大長度,其最大可以存儲 32700 個字節。與 VARCHAR 類型不同的是,該數據類型不受表空間頁大小的限制,對於 4K 頁表空間的表,長度可以超過 4092 字節,只要不超過 32700 字節即可。實際在硬盤上佔用的存儲空間爲 ( 字符串長度 +24),24 個字節用於記錄與該數值相關的信息。

CLOB 稱爲大對象字符串,需要指定長度,CLOB(n [K|M|G]),長度可以是字節,也可以是 K,M 或 G 等某一種單位,每個 CLOB 最大可以存儲 2G 字節的數據。CLOB 數據並不是直接存放在表中,而是單獨存放在一個表空間中,表中存放的是一個指針,指向對應的實際數據。

GRAPHIC,VARGRAPHIC,LONG GRAPHIC 和 DBCLOB 分別與前面的 CHAR,VARCHAR,LONG VARCHR 和 CLOB 對應,只是都存儲雙字節字符,存儲的長度都減小一半。

BLOB 稱爲二進制大對象,也需要指定長度,BLOB(n [K|M|G]),長度可以是字節,也可以是 K,M 或 G 等某一種單位,每個 BLOB 最大可以存儲 2G 字節的二進制數據。與 CLOB 一樣,表中存放的也是指針,指向實際的數據。BLOB 適合於存放圖片、音頻、視頻的容量非常大的內容,DB2 本身不考慮存放的內容是什麼,只是按照二進制的方式將數據存放起來,使用的時候還需要配合相應的函數,對不同內容的數據進行不同的處理。

3.11.3 日期時間型

日期時間型包括 DATE,TIME 和 TIMESTAMP 三種。

DATE 稱爲日期型,能夠表示的年份範圍從公元 1 年到 9999 年中的任何一天,日期型數據顯示出來是固定長度的 10 位字符串,在硬盤上存儲需要佔用 4 個字節,採用的是壓縮字符串形式進行存儲。

TIME 稱爲時間型,能夠表示一天當中的時、分、秒,顯示出來是固定長度的 8 位字符串,在硬盤上存儲需要佔用 3 個字節,採用的也是壓縮字符串形式進行存儲。

TIMESTAMP 稱爲時間戳型,能夠表示年、月、日、時、分、秒,並且能夠精確到微秒級別(具體能夠精確到的位數還與計算機的硬件和操作系統有關)。

3.11.4 XML 類型

XML 是從 DB2 V9 開始引入的新的數據類型,能夠直接把 XML 數據作爲內容存儲到表中,與以往把 XML 作爲大對象存儲不同的是,從 V9 開始,提供了 XQuery(類似於關係數據庫中 SQL 的一種專門針對 XML 的查詢語言)直接對 XML 這種層次型的數據進行各種操作,關於 XQuery 的簡單介紹,請參見第 4 章。關於 XQuery 更詳細的介紹,可以閱讀本叢書的第二本《 DB2 深度解析——高級 DBA 和開發者篇》。

在 9.1 版本中,XML 數據是與表中數據分開存放的,XML 數據單獨存放在一個表空間中,而從 9.5 版本開始,長度比較短的 XML 數據直接存放在表中,長度很長的 XML 數據單獨存放在另外的表空間中,這樣有利於提高查詢效率。

3.11.5 空值

在關係數據庫中還存在一種特殊的類型:空值,用 Null 表示。如果一個值被設置爲空值,表示該值不存在。空值可以放在任意的數據類型中來表示不存在。需要注意的是,空值不能參與任何的算術運算和邏輯運算
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章