在表中存儲數據時,不同類型的數據占用的空間和存儲的方式都不相同。接下來,我們就簡單認識一下 DB2 中的各種數據類型(Data Type)。
DB2 主要分成兩類數據類型:內置的數據類型和用戶自定義的數據類型。本節只介紹內置類型,用戶自定義類型在 3.17.2 節介紹。
內置數據類型主要包括數值型、文本型、日期時間型和 XML 四大類。
數值型具體劃分如圖 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.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 本身不考慮存放的內容是什么,只是按照二進制的方式將數據存放起來,使用的時候還需要配合相應的函數,對不同內容的數據進行不同的處理。
日期時間型包括 DATE,TIME 和 TIMESTAMP 三種。
DATE 稱為日期型,能夠表示的年份范圍從公元 1 年到 9999 年中的任何一天,日期型數據顯示出來是固定長度的 10 位字符串,在硬盤上存儲需要占用 4 個字節,采用的是壓縮字符串形式進行存儲。
TIME 稱為時間型,能夠表示一天當中的時、分、秒,顯示出來是固定長度的 8 位字符串,在硬盤上存儲需要占用 3 個字節,采用的也是壓縮字符串形式進行存儲。
TIMESTAMP 稱為時間戳型,能夠表示年、月、日、時、分、秒,并且能夠精確到微秒級別(具體能夠精確到的位數還與計算機的硬件和操作系統有關)。
XML 是從 DB2 V9 開始引入的新的數據類型,能夠直接把 XML 數據作為內容存儲到表中,與以往把 XML 作為大對象存儲不同的是,從 V9 開始,提供了 XQuery(類似于關系數據庫中 SQL 的一種專門針對 XML 的查詢語言)直接對 XML 這種層次型的數據進行各種操作,關于 XQuery 的簡單介紹,請參見第 4 章。關于 XQuery 更詳細的介紹,可以閱讀本叢書的第二本《 DB2 深度解析——高級 DBA 和開發者篇》。
在 9.1 版本中,XML 數據是與表中數據分開存放的,XML 數據單獨存放在一個表空間中,而從 9.5 版本開始,長度比較短的 XML 數據直接存放在表中,長度很長的 XML 數據單獨存放在另外的表空間中,這樣有利于提高查詢效率。
在關系數據庫中還存在一種特殊的類型:空值,用 Null 表示。如果一個值被設置為空值,表示該值不存在。空值可以放在任意的數據類型中來表示不存在。需要注意的是,空值不能參與任何的算術運算和邏輯運算。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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