Oracle資料型別 | 簡要說明 |
---|---|
字元型別 | char和varchar2,可表達任何字串 |
數字型別 | number(m,n),可表達任何數字,m是數字的精度,n是小數點後的位數,如果n為0則表示是一個整數。 |
日期型別 | date,存放日期和時間,包括年(yyyy)、月(mm)、日(dd)、小時(hh24)、分(mi)、秒(ss) |
clob型別 | 存放單位元組字串或多位元組字串資料,如文字檔案、xml檔案 |
blob型別 | 存放非結構化的二進位制資料,如圖片、音訊、影片、office文件等 |
rowid型別 urowid型別 |
存放表中記錄在資料庫中的實體地址 |
字元型別
字元型別 | 定長/變長 | 是否必須指定長度 | 預設值 | 位元組 | unicode字符集 |
---|---|---|---|---|---|
char | 定長字元型別(未達到指定長度時,自動在末尾用空格補全) | 否 | 1 | 最大2000位元組 | 非unicode |
nchar | 定長字元型別(未達到指定長度時,自動在末尾用空格補全) | 否 | 1 | 最大1000位元組,所有字元都佔兩個位元組 | 根據unicode |
varchar2 | 變長字元型別(未達到指定長度時,不自動補全空格) | 是 | 最大4000位元組 | 非unicode | |
nvarchar2 | 變長字元型別(未達到指定長度時,不自動補全空格) | 是 | 最大2000位元組 | 根據unicode |
-
最大xxx位元組,位元組而非字元個數,如char(1)就連一個漢字都不能存放。
-
unicode字符集是為了解決字符集不相容的問題而產生的,所有字元都用兩個位元組表示,即英文字元也用兩個位元組表示。
建立表驗證字元型別
create table char_table( char_column char, nchar_column nchar(2), varchar2_column varchar2(4000), nvarchar2_column nvarchar2(4) );
插入資料
insert into char_table values ('1', '太一', '亞古獸進化', '暴龍獸');
查詢資料
select * from char_table;
數字型別
oracle中的數字型別主要為三種:number,float,binary_*,其他的型別基本上都是number型別或者float型別的子型別。
數字型別 | 使用頻率 | 說明 |
---|---|---|
number(p,s) | 常用 | 略 |
float | 不常用 | 二進位制精度,需要進行精度轉換 |
binary_float binary_double |
不常用 | 表示範圍更大可用於科學計算,精度沒有number型別高(可用於金融資料) |
number(p,s)型別
22個位元組的儲存空間
字母 | 釋義 | 說明 | 取值範圍 | 預設值 | 其它 |
---|---|---|---|---|---|
p | DBA_TAB_COLUMNS表的DATA_PRECISION(精度) | 包括小數在內的總共有效位數 | [1~38] |
若沒有指定,預設為38 | 當整數部分的長度大於p時,報錯 |
s | DBA_TAB_COLUMNS表的DATA_SCALE(小數位) | 精確到多少位小數 | [-84~127] |
若沒有指定,預設為0 | 當小數位數大於s時,並四捨五入 當s取負數時,將小數點左邊的s置為0,並四捨五入 |
官方文件給出的幾個例子如下:
輸入資料 | 定義型別 | 儲存結果 |
---|---|---|
1,234,567.89 | NUMBER | 1234563.89 |
1,234,567.89 | NUMBER(*,1) | 1234563.9 |
1,234,567.89 | NUMBER(9) | 1234564 |
1,234,567.89 | NUMBER(9,2) | 1234563.89 |
1,234,567.89 | NUMBER(9,1) | 1234563.9 |
1,234,567.89 | NUMBER(6) | 報錯,超精度 |
1,234,567.89 | NUMBER(7,-2) | 1234600 |
number型別的子型別
number型別的子型別 | 簡要說明 |
---|---|
integer | 等同於number(38) |
smallint | 同於number(38) |
decimal | 可以使用decimal(p,s),若p,s未指定,等同於number(38) |
float型別
字母 | 釋義 | 說明 | 取值範圍 | 預設值 |
---|---|---|---|---|
float(b) | 二進位制精度(binary precision | b表示二進位制進度 | [1,126] |
126 |
b是一個二進位制精度(binary precision),而不是我們通常說的十進位制精度(decimal precision)
需要進行以下的轉換:binary precision=int(b*0.30103)
舉例來說:當b=2,則對應的十進位制精度為int(2*0.30103)=0
,即小數點後精度為0。
eg:56.2儲存到float(2)變為60。計算過程:56.2=5.62*10^1
,因為精度為0只能取到整數,5.62四捨五入後為6,最後取值為6*10^1=60
float型別的子型別
float型別的子型別 | 簡要說明 |
---|---|
real | 等同於float(63) |
binary_float和binary_double型別
資料型別 | 說明 | 位元組長度 |
---|---|---|
binary_float | 32位單精度浮點數資料型別 | 5個位元組(4位元組+1個長度位元組)支援至少6位精度 |
binary_double | 64位雙精度浮點數資料型別 | 9個位元組(8位元組+1個長度位元組) |
建立表驗證數字型別
create table num_table( number1 number, number2 number(38), number3 number(9,2), int4 int, smallint1 smallint, decimal1 decimal(5,2), float1 float, float2 float(2), real1 real, binary_float1 binary_float, binary_double1 binary_double );
插入資料
insert into num_table values (1.23, 123, 1234567.89, 573, 34, 673.43, 34.1264, 56.2, 23.231, 12.34f, 34.56d);
查詢資料
select * from num_table;
日期型別
未完待續...
long型別
未完待續...
blob & clob & nclob大物件資料型別
未完待續...
rowid & urowid型別
未完待續...