如果你經常在不同類型資料庫做開發或學習時,切換資料庫寫腳本時,不同資料庫的資料類型可能會讓你有點“暈”。下面我将對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
用來存儲非結構化資料的變長字元串
長度<= 2000位元組
long raw
長度<=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'