天天看點

三大資料庫對比研究系列——資料類型

如果你經常在不同類型資料庫做開發或學習時,切換資料庫寫腳本時,不同資料庫的資料類型可能會讓你有點“暈”。下面我将對oracle、sql server 、mysql三種資料庫的資料類型做下例舉、比較

sql server資料庫暫且以sql server 2005為參考

sql server 資料類型分的比較細: 整數資料、 字元資料、 貨币資料、日期和時間資料、二進制字元串等

資料類型

所屬類型

所占位元組

範圍

tinyint

精确數字類型

1位元組

0 ~ 255

smallint

2位元組

-215(-32768)~215-1(32767)

int

4位元組

-231 (-2,147,483,648) 到 231-1 (2,147,483,647)

bigint

8位元組

-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)

bit

視情況定(參加msdn)

取值為0、1或null

decimal

5~17位元組

固定精度和小數位數。使用最大精度時,有效值從 - 10^38 +1 到 10^38 - 1

numeric

類似于decimal

smallmoney

-214,748.3648 到 214,748.3647

money

-922,337,203,685,477.5808 到 922,337,203,685,477.5807

float

近似數字

4或8位元組取決于float(n)中n的值

-1.79e + 308 至 -2.23e - 308、0 以及 2.23e - 308 至 1.79e + 308

real

-3.40e + 38 至 -1.18e - 38、0 以及 1.18e - 38 至 3.40e + 38

smalldatetime

時間類型

1900 年 1 月 1 日到 2079 年 6 月 6 日

精度為一分鐘

datetime

1753 年 1 月 1 日到 9999 年 12 月 31 日

精度為3.33毫秒

char

字元串類型

char(n)跟n有關

固定長度、非unicode字元資料

取值範圍為1~8000

varchar

存儲大小事輸入資料的實際長度加2個位元組

取值範圍1~8000

max訓示最大存儲大小是2^31 -1個位元組

text

nchar

unicode字元串

nchar(n)占2*n個位元組

1—4000

nvarchar

nvarchar(n)占2*n

nvarchar(max)

1—4000 nvarchar(max)訓示最大存儲大小為2^31 -1位元組

ntext

1—2^30 -1 (1073741823)字元,一個字元占兩個位元組

binary

二進制字元串

binary(n)

1—8000

varbinary

varbinary(n|max)

1—8000 max訓示2^31 -1 (2,147,483,647)

image

0—2^31 -1 (2,147,483,647)

cursor

其它資料類型

這是變量或存儲過程output參數的一種資料類型

timestamp

2000好像沒有這個資料類型

sql variant

一種資料類型,用于存儲sql server 2005支援的各種資料類型

(不包括text、ntext、image、timestamp和sql variant)

<a>uniqueidentifier</a>

16位元組

使用newid函數獲得

table

一種特殊的資料類型,用于存儲結果集以進行後續處理。

xml

mysql資料類型

數字類型(整數)

2

-32000——32000

4

-2000000000——2000000000

8

不能用smallint或int描述的超大整數

數字類型(單精度浮點)

單精度浮點數

double

數字類型(雙節點浮點)

雙精度浮點數

數字類型(使用者定義精度的浮點資料)

位元組數取決于精度與長度

字元串

char(n)與n位元組

varchar(n)占n+1個位元組

2+ 實際長度

沒有最大長度限制的可變長度的字元串

blob

變長 2+實際字元串長度

存儲圖檔、附件、二進制檔案

date

3

存儲日期yyyy-mm-dd

time

存儲時間或時間間隔

存儲包含日期和時間的資料

時間類型(時間戳)

year

1

yyyy格式的年份

enum

1或2

一組資料,使用者可以從中選擇一個

set

1—8取決于設定的大小

一組資料,使用者可從中選擇0,1或跟多

oracle資料類型

char(n) n個位元組 存儲固定長度的子字元串,如果沒有明确說明長度,預設長度為1,如果長度不足規定長度,oracle自動用空格填充

1—2000

varchar2

可變長字元串類型。 varchar2(n) n 如果最大長度不是n,不需要空格填充,推薦使用varchar2

nvarchar2

number

數字類型

long

存儲最大長度為2gb的變長的變長字元串

2gb

raw

用來存儲非結構化資料的變長字元串

長度&lt;= 2000位元組

long raw

長度&lt;=2gb

rowid

僞列

大型對象資料類型

存儲二進制資料資訊

clob

隻能存儲字元資料

nclob

存儲本地語言字元集資料

bfile

存儲在oracle資料庫以外的檔案的指針

urowid

用來存儲表示任何類型列位址的二進制字元串

存儲浮點數

從上面我們可以看出sql server資料類型的粒度分得最細,當然上面整理的資料類型也未必是最新的,不同版本的資料庫對資料類型的支援是不同的(有新的資料類型增加或舊的資料類型删除)。

sql server 2005或以上版本的資料類型你可以通過系統視圖檢視

select * from sys.types

select name, max_length, precision, scale from sys.types

三大資料庫對比研究系列——資料類型

其中max_length 表示類型的最大長度(以位元組為機關)但是imge,text,ntext的最大長度為16,有點不明白。個人懷疑是儲存的資料的位址()。至于xml為-1就更不明白了。

oracle 10g 的資料類型  dba_types中儲存了資料庫中所有的抽象資料類型   user_types 表中使用者的類型。 

select * from user_types where typecode !='object' and typecode != 'collection'

select * from dba_types where typecode !='object' and typecode != 'collection'