[转]sqlserver 数据类型 及使用考虑
本文轉(zhuǎn)自:http://www.cnblogs.com/auiso/archive/2006/09/02/492796.html
?
在 Microsoft? SQL Server? 中,每個列、局部變量、表達式和參數(shù)都有一個相關(guān)的數(shù)據(jù)類型,這是指定對象可持有的數(shù)據(jù)類型(整型、字符、money 等等)的特性。SQL Server 提供系統(tǒng)數(shù)據(jù)類型集,定義了可與 SQL Server 一起使用的所有數(shù)據(jù)類型。下面列出系統(tǒng)提供的數(shù)據(jù)類型集。
可以定義用戶定義的數(shù)據(jù)類型,其是系統(tǒng)提供的數(shù)據(jù)類型的別名。有關(guān)用戶定義的數(shù)據(jù)類型的更多信息,請參見 sp_addtype 和創(chuàng)建用戶定義的數(shù)據(jù)類型。
當(dāng)兩個具有不同數(shù)據(jù)類型、排序規(guī)則、精度、小數(shù)位數(shù)或長度的表達式通過運算符進行組合時:
SQL Server 為 SQL-92 兼容性提供了數(shù)據(jù)類型同義詞。有關(guān)更多信息,請參見數(shù)據(jù)類型同義詞。
精確數(shù)字
整數(shù)
bigint
從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數(shù)據(jù)(所有數(shù)字)。
int
從 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型數(shù)據(jù)(所有數(shù)字)。
smallint
從 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整數(shù)數(shù)據(jù)。
tinyint
從 0 到 255 的整數(shù)數(shù)據(jù)。
bit
bit
1 或 0 的整數(shù)數(shù)據(jù)。
decimal 和 numeric
decimal
從 -10^38 +1 到 10^38 –1 的固定精度和小數(shù)位的數(shù)字?jǐn)?shù)據(jù)。
numeric
功能上等同于 decimal。
money 和 smallmoney
money
貨幣數(shù)據(jù)值介于 -2^63 (-922,337,203,685,477.5808) 與 2^63 - 1 (+922,337,203,685,477.5807) 之間,精確到貨幣單位的千分之十。
smallmoney
貨幣數(shù)據(jù)值介于 -214,748.3648 與 +214,748.3647 之間,精確到貨幣單位的千分之十。
近似數(shù)字
float
從 -1.79E + 308 到 1.79E + 308 的浮點精度數(shù)字。
real
從 -3.40E + 38 到 3.40E + 38 的浮點精度數(shù)字。
datetime 和 smalldatetime
datetime
從 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和時間數(shù)據(jù),精確到百分之三秒(或 3.33 毫秒)。
smalldatetime
從 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和時間數(shù)據(jù),精確到分鐘。
字符串
char
固定長度的非 Unicode 字符數(shù)據(jù),最大長度為 8,000 個字符。
varchar
可變長度的非 Unicode 數(shù)據(jù),最長為 8,000 個字符。
text
可變長度的非 Unicode 數(shù)據(jù),最大長度為 2^31 - 1 (2,147,483,647) 個字符。
Unicode 字符串
nchar
固定長度的 Unicode 數(shù)據(jù),最大長度為 4,000 個字符。
nvarchar
可變長度 Unicode 數(shù)據(jù),其最大長度為 4,000 字符。sysname 是系統(tǒng)提供用戶定義的數(shù)據(jù)類型,在功能上等同于 nvarchar(128),用于引用數(shù)據(jù)庫對象名。
ntext
可變長度 Unicode 數(shù)據(jù),其最大長度為 2^30 - 1 (1,073,741,823) 個字符。
二進制字符串
binary
固定長度的二進制數(shù)據(jù),其最大長度為 8,000 個字節(jié)。
varbinary
可變長度的二進制數(shù)據(jù),其最大長度為 8,000 個字節(jié)。
image
可變長度的二進制數(shù)據(jù),其最大長度為 2^31 - 1 (2,147,483,647) 個字節(jié)。
其它數(shù)據(jù)類型
cursor
游標(biāo)的引用。
sql_variant
一種存儲 SQL Server 支持的各種數(shù)據(jù)類型(text、ntext、timestamp 和 sql_variant 除外)值的數(shù)據(jù)類型。
table
一種特殊的數(shù)據(jù)類型,存儲供以后處理的結(jié)果集。
timestamp
數(shù)據(jù)庫范圍的唯一數(shù)字,每次更新行時也進行更新。
uniqueidentifier
全局唯一標(biāo)識符 (GUID)。
optimize SQLSERVER 3數(shù)據(jù)類型的考慮
分類:SQLSERVER
l? decimal和numeric中盡量選用decimal,numeric只是為了向后兼容。
l? bigint,int,smallint,tinyint中
首先int,空間占用合適,運算速度快;(2147,...,...2個多億)
如果非常在意空間的話,考慮tinyint
超大應(yīng)用場合,考慮bigint
l?money,smallmoney
盡量考慮用decimal替代,原因:性能稍稍好一些;相對其它數(shù)據(jù)庫兼容性好。
money的好處是可以用到某些貨幣運算函數(shù)。
float類型盡量少用,性能不好,精度不高,一般只用于科學(xué)計算。
l??char,varchar,nchar/nvarchar
char性能好;varchar節(jié)省空間;選擇方法:10個字節(jié)以上的用varchar
n類型的占用空間大,性能低,如果不準(zhǔn)備存中文或中亞文字則盡量避免使用。
尤其向類似工號的字段更不要使用n類型,首先它不會存入中文,其次它可能作為索引,此時對性能的影響就更大。
l??text/image? 考慮到維護方便、效率以及程序開發(fā)的方便性,最好不用,即不將其存入數(shù)據(jù)庫中;采用varchar指向其相應(yīng)的存儲路徑。
1)char、varchar、text和nchar、nvarchar、ntext?
char和varchar的長度都在1到8000之間,它們的區(qū)別在于char是定長字符數(shù)據(jù),而varchar是變長字符數(shù)據(jù)。所謂定長就是長度固定的,當(dāng)輸入的數(shù)據(jù)長度沒有達到指定的長度時將自動以英文空格在其后面填充,使長度達到相應(yīng)的長度;而變長字符數(shù)據(jù)則不會以空格填充。text存儲可變長度的非Unicode數(shù)據(jù),最大長度為2^31-1(2,147,483,647)個字符。 ?
后面三種數(shù)據(jù)類型和前面的相比,從名稱上看只是多了個字母"n",它表示存儲的是Unicode數(shù)據(jù)類型的字符。寫過程序的朋友對Unicode應(yīng)該很了解。字符中,英文字符只需要一個字節(jié)存儲就足夠了,但漢字眾多,需要兩個字節(jié)存儲,英文與漢字同時存在時容易造成混亂,Unicode字符集就是為了解決字符集這種不兼容的問題而產(chǎn)生的,它所有的字符都用兩個字節(jié)表示,即英文字符也是用兩個字節(jié)表示。nchar、nvarchar的長度是在1到4000之間。和char、varchar比較:nchar、nvarchar則最多存儲4000個字符,不論是英文還是漢字;而char、varchar最多能存儲8000個英文,4000個漢字。可以看出使用nchar、nvarchar數(shù)據(jù)類型時不用擔(dān)心輸入的字符是英文還是漢字,較為方便,但在存儲英文時數(shù)量上有些損失。 ?
(2)datetime和smalldatetime?
datetime:從1753年1月1日到9999年12月31日的日期和時間數(shù)據(jù),精確到百分之三秒。?
smalldatetime:從1900年1月1日到2079年6月6日的日期和時間數(shù)據(jù),精確到分鐘。 ?
(3)bitint、int、smallint、tinyint和bit?
bigint:從-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型數(shù)據(jù)。?
int:從-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型數(shù)據(jù)。?
smallint:從-2^15(-32,768)到2^15-1(32,767)的整數(shù)數(shù)據(jù)。?
tinyint:從0到255的整數(shù)數(shù)據(jù)。?
bit:1或0的整數(shù)數(shù)據(jù)。 ?
(4)decimal和numeric?
這兩種數(shù)據(jù)類型是等效的。都有兩個參數(shù):p(精度)和s(小數(shù)位數(shù))。p指定小數(shù)點左邊和右邊可以存儲的十進制數(shù)字的最大個數(shù),p必須是從?1到38之間的值。s指定小數(shù)點右邊可以存儲的十進制數(shù)字的最大個數(shù),s必須是從0到p之間的值,默認(rèn)小數(shù)位數(shù)是0。 ?
(5)float和real?
float:從-1.79^308到1.79^308之間的浮點數(shù)字?jǐn)?shù)據(jù)。?
real:從-3.40^38到3.40^38之間的浮點數(shù)字?jǐn)?shù)據(jù)。在SQL?Server中,real的同義詞為float(24)。
總結(jié)
以上是生活随笔為你收集整理的[转]sqlserver 数据类型 及使用考虑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剖析短迭代
- 下一篇: 暴风影音CEO冯鑫称与腾讯不惜一战