數據類型 | 參數 | 描寫 |
char(n) | n=1 to 2000字節 | 定長字符串,n字節長,如果不指定長度,缺省為1個字節長(一個漢字為2字節) |
varchar2(n) | n=1 to 4000字節 | 可變長的字符串,具體定義時指明最大長度n, 這種數據類型可以放數字、字母以及ASCII碼字符集(或者EBCDIC等數據庫系統接管的字符集標准)中的所有符號。 如果數據長度沒有到達最大值n,Oracle 8i會依據數據大小主動調節字段長度, 如果你的數據前后有空格,Oracle 8i會主動將其刪去。VARCHAR2是最常用的數據類型。 可做索引的最大長度3209。 |
number(m, n) |
m=1 to 38 n=-84 to 127 |
可變長的數值列,容許0、正值及負值,m是所有有效數字的位數,n是小數點以后的位數。 如:number(5,2),則這個字段的最大值是99,999,如果數值越過了位數限制就會被截取多余的位數。 如:number(5,2),但在一行數據中的這個字段輸入575.316,則真正保存到字段中的數值是575.32。 如:number(3,0),輸入575.316,真正保存的數據是575。 |
date | 無 | 從公元前4712年1月1日到公元4712年12月31日的所有合法日期, Oracle 8i其實在內部是按7個字節來保存日期數據,在定義中還包含小時、分、秒。 缺省格局為DD-MON-YY,如07-11月-00 表示2000年11月7日。 |
long | 無 | 可變長字符列,最大長度限制是2GB,用於不須要作字符串搜索的長串數據,如果要進行字符搜索就要用varchar2類型。 long是一種較老的數據類型,將來會逐漸被BLOB、CLOB、NCLOB等大的對象數據類型所取代。 |
raw(n) | n=1 to 2000 | 可變長二進制數據,在具體定義字段的時候必需指明最大長度n,Oracle 8i用這種格局來保存較小的圖形文件或帶格局的文本文件,如Miceosoft Word文檔。 raw是一種較老的數據類型,將來會逐漸被BLOB、CLOB、NCLOB等大的對象數據類型所取代。 |
long raw | 無 | 可變長二進制數據,最大長度是2GB。Oracle 8i用這種格局來保存較大的圖形文件或帶格局的文本文件,如Miceosoft Word文檔,以及音頻、視頻等非文本文件。 在同一張表中不能同時有long類型和long raw類型,long raw也是一種較老的數據類型,將來會逐漸被BLOB、CLOB、NCLOB等大的對象數據類型所取代。 |
blob clob nclob |
無 | 三種大型對象(LOB),用來保存較大的圖形文件或帶格局的文本文件,如Miceosoft Word文檔,以及音頻、視頻等非文本文件,最大長度是4GB。 LOB有幾種類型,取決於你使用的字節的類型,Oracle 8i實實在在地將這些數據存儲在數據庫內部保存。 可以實行讀取、存儲、寫入等特別操作。 |
bfile | 無 | 在數據庫外部保存的大型二進制對象文件,最大長度是4GB。 這種外部的LOB類型,通過數據庫記載變革情況,但是數據的具體保存是在數據庫外部進行的。 Oracle 8i可以讀取、查詢BFILE,但是不能寫入。 大小由操作系統決議。 |
類型如下:
字段類型 中文說明 限制條件 其它說明
CHAR 固定長度字符串 最大長度2000 bytes
VARCHAR2 可變長度的字符串 最大長度4000 bytes 可做索引的最大長度749
NCHAR 根據字符集而定的固定長度字符串 最大長度2000 bytes
NVARCHAR2 根據字符集而定的可變長度字符串 最大長度4000 bytes
DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS)長度7 bytes 無千蟲問題
LONG 超長字符串 最大長度2G(231-1) 足夠存儲大部頭著作
RAW 固定長度的二進制數據 最大長度2000 bytes 可存放多媒體圖象聲音等
LONG RAW 可變長度的二進制數據 最大長度2G 同上
BLOB 二進制數據 最大長度4G
CLOB 字符數據 最大長度4G
NCLOB 根據字符集而定的字符數據 最大長度4G
BFILE 存放在數據庫外的二進制數據 最大長度4G
ROWID 數據表中記錄的唯一行號 10 bytes ********.****.****格式,*為0或1
NROWID 二進制數據表中記錄的唯一行號 最大長度4000 bytes
NUMBER(P,S) 數字類型 P為整數位,S為小數位
NUMBER最多占用22個字節,最大可以保存38個十進制位.
--------------------------------------------------------------------------------------------------------------------------------------------
Date(長度 7 類型 12)
col dump_date form. a35
col real_date form. a35
select dump(last_ddl_time) dump_date,
to_char(last_ddl_time,'yyyy-mm-dd hh24:mi:ss') real_date
from user_objects
where rownum=1;
DUMP_DATE REAL_DATE
----------------------------------- ---------------------
Typ=12 Len=7: 120,102,4,13,16,48,53 2002-04-13 15:47:52
世紀 120 - 100 = 20 世紀和年份加100后存儲
年份 102 - 100 = 2
月份 4 月份和日期按原值存儲
日期 13
小時 16 - 1 = 15 時間均加1后存儲
分鍾 48 - 1 = 47
秒 53 - 1 = 52
--------------------------------------------------------------------------------
Number(類型 2)
<[長度]>,符號位/指數 數字1,數字2,數字3,......,數字20
正數:指數=數字1 - 193 (最高位為1是代表正數)
負數:指數=62 - 第一字節
數字1是最高有效位
正數:加1存儲
負數:被101減,如果總長度小於21個字節,最后加一個102(是為了排序的需要)
所存儲的數值計算方法為:
把下面計算的結果加起來:
每個數字乘以100^(指數-N) (N是有效位數的順序位,第一個有效位的N=0)
例:
select dump(123456.789) from dual;
DUMP(123456.789)
-------------------------------
Typ=2 Len=6: 195,13,35,57,79,91
指數 195 - 193 = 2
數字1 13 - 1 = 12 *1002-0 120000
數字2 35 - 1 = 34 *1002-1 3400
數字3 57 - 1 = 56 *1002-2 56
數字4 79 - 1 = 78 *1002-3 .78
數字5 91 - 1 = 90 *1002-4 .009
123456.789
select dump(-123456.789) from dual;
DUMP(-123456.789)
----------------------------------
Typ=2 Len=7: 60,89,67,45,23,11,102
指數 62 - 60 = 2(最高位是0,代表為負數)
數字1 101 - 89 = 12 *1002-0 120000
數字2 101 - 67 = 34 *1002-1 3400
數字3 101 - 45 = 56 *1002-2 56
數字4 101 - 23 = 78 *1002-3 .78
數字5 101 - 11 = 90 *1002-4 .009
123456.789(-)
現在再考慮一下為什么在最后加102是為了排序的需要,-123456.789在數據庫中實際存儲為
60,89,67,45,23,11
而-123456.78901在數據庫中實際存儲為
60,89,67,45,23,11,91
可見,如果不在最后加上102,在排序時會出現-123456.789<-123456.78901的情況。
--------------------------------------------------------------------------------------------------------------------------------------------
number類型的數字存儲所占用的空間,是跟實際數字的大小有關系的,並不是固定的長度!
dump返回的那一串東西分別表示的是什么意思?
typ 數據類型
len 數據長度
后面緊跟的是真實數據存儲
比如
SQL> select dump(0) from dual;
DUMP(0)
----------------
Typ=2 Len=1: 128
SQL>
2表示number類型
len表示1字節
128表示字節bit為 1000 0000 ---> Ox 80
SQL> select dump(1111111) from dual;
DUMP(1111111)
---------------------------
Typ=2 Len=5: 196,2,12,12,12
SQL> select dump(1111111111111) from dual;
DUMP(1111111111111)
------------------------------------
Typ=2 Len=8: 199,2,12,12,12,12,12,12