在表中存儲數(shù)據(jù)時,不同類型的數(shù)據(jù)占用的空間和存儲的方式都不相同。接下來,我們就簡單認(rèn)識一下 DB2 中的各種數(shù)據(jù)類型(Data Type)。
DB2 主要分成兩類數(shù)據(jù)類型:內(nèi)置的數(shù)據(jù)類型和用戶自定義的數(shù)據(jù)類型。本節(jié)只介紹內(nèi)置類型,用戶自定義類型在 3.17.2 節(jié)介紹。
內(nèi)置數(shù)據(jù)類型主要包括數(shù)值型、文本型、日期時間型和 XML 四大類。
數(shù)值型具體劃分如圖 3.19 所示。
圖 3.19 數(shù)值型數(shù)據(jù)的種類
?
SMALLINT 稱為小整型或短整型,是兩個字節(jié)的整數(shù),精度為 5 位,其數(shù)據(jù)表示范圍從 -32,768 到 32,767。
INT 稱為整型,也可以寫成 INTEGER,是四個字節(jié)的整數(shù),精度為 10 位,其數(shù)據(jù)表示范圍從 -2,147,483,648 到 2,147,483,647。
BIGINT 稱為大整型或長整型,是八個字節(jié)的整數(shù),精度為 19 位,其數(shù)據(jù)表示范圍從 9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
REAL 稱為單精度浮點數(shù),是實數(shù)的 32 位近似值。數(shù)字可以為零,或者在從 -3.402E+38 到 -1.175E-37 或從 1.175E-37 到 3.402E+38 的范圍內(nèi)。
DOUBLE 稱為雙精度浮點數(shù),是實數(shù)的 64 位近似值。數(shù)字可以為零,或者在從 -1.79769E+308 到 -2.225E-307 或從 2.225E-307 到 1.79769E+308 的范圍內(nèi)。
DECFLOAT 稱為十進(jìn)制浮點數(shù),是 V9.5 中引入的新數(shù)據(jù)類型,適合于處理準(zhǔn)確的十進(jìn)制業(yè)務(wù)。它具有 DECIMAL 類型的準(zhǔn)確性,同時又具有浮點數(shù)的性能優(yōu)勢,特別適合于在處理貨幣值相關(guān)的應(yīng)用程序中使用。
DECIMAL 稱為十進(jìn)制數(shù),是一種可以自己定義小數(shù)位數(shù)的壓縮型十進(jìn)制數(shù),也可以寫成 DEC,NUMERIC 或者 NUM,定義這種類型的數(shù)據(jù)需要指定兩個參數(shù):DECIMAL(p,s)。p 表示數(shù)字的總長度(不包括正負(fù)號和小數(shù)點),s 表示小數(shù)長度。
DECIMAL 類型的數(shù)據(jù)可以精確地表示指定精度的小數(shù)。它所占用的存儲空間與第一個參數(shù),即數(shù)字的總長度有關(guān),計算公式為:tranc(p/2)+1。其中 tranc 表示截取整數(shù)部分。
字符型具體劃分如 3.20 所示。
CHAR 稱為定長字符串,需要指定長度,如 CHAR(10)。也可以寫成 CHARACTER( 長度 )。定長字符串的長度介于 1 到 254 字節(jié)之間。如果沒有指定長度,那么就認(rèn)為是 1 個字節(jié)。
VARCHAR 稱為變長字符串,需要指定最大長度,如 VARCHAR(20)。變長字符串長度的最大值是 32672。存儲變長字符串時,需要額外花費 4 個字節(jié)來記錄字符串的實際長度。所以,如果指定了 VARCHAR(20),每個這種類型的數(shù)據(jù)在硬盤上實際要占用 20+4=24 個字節(jié)的空間。
需要注意的是,對于變長字符串的實際占用存儲空間量還有一個限制:數(shù)據(jù)必須適合放在單個表空間頁面上。也就是說,對于使用 4K 頁表空間的表,長度不能超過 4 × 1024-4=4092 字節(jié);對于 8K 頁表空間的表,長度不能超過 8 × 1024-4=8188 字節(jié);對于 16K 頁表空間的表,長度不能超過 16 × 1024-4=16380 字節(jié);對于 32K 頁表空間的表,長度不能超過 32 × 1024-4=32764 字節(jié),但是該數(shù)超過了 VARCHAR 的最大長度 32672,所以對于 32K 頁表空間的表,最大能夠存放 32672 字節(jié)。默認(rèn)情況下表空間為 4K,所以要使用 VARCHAR 類型來存儲超過 4092 字節(jié)的數(shù)據(jù),就需要顯式創(chuàng)建更大頁大小的表空間。
LONG VARCHAR 稱為大型變長字符串,不需要指定最大長度,其最大可以存儲 32700 個字節(jié)。與 VARCHAR 類型不同的是,該數(shù)據(jù)類型不受表空間頁大小的限制,對于 4K 頁表空間的表,長度可以超過 4092 字節(jié),只要不超過 32700 字節(jié)即可。實際在硬盤上占用的存儲空間為 ( 字符串長度 +24),24 個字節(jié)用于記錄與該數(shù)值相關(guān)的信息。
CLOB 稱為大對象字符串,需要指定長度,CLOB(n [K|M|G]),長度可以是字節(jié),也可以是 K,M 或 G 等某一種單位,每個 CLOB 最大可以存儲 2G 字節(jié)的數(shù)據(jù)。CLOB 數(shù)據(jù)并不是直接存放在表中,而是單獨存放在一個表空間中,表中存放的是一個指針,指向?qū)?yīng)的實際數(shù)據(jù)。
GRAPHIC,VARGRAPHIC,LONG GRAPHIC 和 DBCLOB 分別與前面的 CHAR,VARCHAR,LONG VARCHR 和 CLOB 對應(yīng),只是都存儲雙字節(jié)字符,存儲的長度都減小一半。
BLOB 稱為二進(jìn)制大對象,也需要指定長度,BLOB(n [K|M|G]),長度可以是字節(jié),也可以是 K,M 或 G 等某一種單位,每個 BLOB 最大可以存儲 2G 字節(jié)的二進(jìn)制數(shù)據(jù)。與 CLOB 一樣,表中存放的也是指針,指向?qū)嶋H的數(shù)據(jù)。BLOB 適合于存放圖片、音頻、視頻的容量非常大的內(nèi)容,DB2 本身不考慮存放的內(nèi)容是什么,只是按照二進(jìn)制的方式將數(shù)據(jù)存放起來,使用的時候還需要配合相應(yīng)的函數(shù),對不同內(nèi)容的數(shù)據(jù)進(jìn)行不同的處理。
日期時間型包括 DATE,TIME 和 TIMESTAMP 三種。
DATE 稱為日期型,能夠表示的年份范圍從公元 1 年到 9999 年中的任何一天,日期型數(shù)據(jù)顯示出來是固定長度的 10 位字符串,在硬盤上存儲需要占用 4 個字節(jié),采用的是壓縮字符串形式進(jìn)行存儲。
TIME 稱為時間型,能夠表示一天當(dāng)中的時、分、秒,顯示出來是固定長度的 8 位字符串,在硬盤上存儲需要占用 3 個字節(jié),采用的也是壓縮字符串形式進(jìn)行存儲。
TIMESTAMP 稱為時間戳型,能夠表示年、月、日、時、分、秒,并且能夠精確到微秒級別(具體能夠精確到的位數(shù)還與計算機(jī)的硬件和操作系統(tǒng)有關(guān))。
XML 是從 DB2 V9 開始引入的新的數(shù)據(jù)類型,能夠直接把 XML 數(shù)據(jù)作為內(nèi)容存儲到表中,與以往把 XML 作為大對象存儲不同的是,從 V9 開始,提供了 XQuery(類似于關(guān)系數(shù)據(jù)庫中 SQL 的一種專門針對 XML 的查詢語言)直接對 XML 這種層次型的數(shù)據(jù)進(jìn)行各種操作,關(guān)于 XQuery 的簡單介紹,請參見第 4 章。關(guān)于 XQuery 更詳細(xì)的介紹,可以閱讀本叢書的第二本《 DB2 深度解析——高級 DBA 和開發(fā)者篇》。
在 9.1 版本中,XML 數(shù)據(jù)是與表中數(shù)據(jù)分開存放的,XML 數(shù)據(jù)單獨存放在一個表空間中,而從 9.5 版本開始,長度比較短的 XML 數(shù)據(jù)直接存放在表中,長度很長的 XML 數(shù)據(jù)單獨存放在另外的表空間中,這樣有利于提高查詢效率。
在關(guān)系數(shù)據(jù)庫中還存在一種特殊的類型:空值,用 Null 表示。如果一個值被設(shè)置為空值,表示該值不存在。空值可以放在任意的數(shù)據(jù)類型中來表示不存在。需要注意的是,空值不能參與任何的算術(shù)運算和邏輯運算。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
