(1) 整數(shù)型
整數(shù)包括bigint侥锦、int、smallint和tinyint德挣,從標(biāo)識(shí)符的含義就可以看出恭垦,它們的表示數(shù)范圍逐漸縮小。
l bigint:大整數(shù)格嗅,數(shù)范圍為 -263 (-9223372036854775808)~263-1 (9223372036854775807) 番挺,其精度為19,小數(shù)位數(shù)為0屯掖,長(zhǎng)度為8字節(jié)玄柏。
l int:整數(shù),數(shù)范圍為 -231 (-2,147,483,648) ~231 - 1 (2,147,483,647) 贴铜,其精度為10粪摘,小數(shù)位數(shù)為0,長(zhǎng)度為4字節(jié)绍坝。
l smallint:短整數(shù)徘意,數(shù)范圍為 -215 (-32768) ~215 - 1 (32767) ,其精度為5轩褐,小數(shù)位數(shù)為0椎咧,長(zhǎng)度為2字節(jié)。
l tinyint:微短整數(shù)把介,數(shù)范圍為 0~255勤讽,長(zhǎng)度為1字節(jié),其精度為3劳澄,小數(shù)位數(shù)為0地技,長(zhǎng)度為1字節(jié)。
(2) 精確整數(shù)型
精確整數(shù)型數(shù)據(jù)由整數(shù)部分和小數(shù)部分構(gòu)成秒拔,其所有的數(shù)字都是有效位莫矗,能夠以完整的精度存儲(chǔ)十進(jìn)制數(shù)。精確整數(shù)型包括decimal 和 numeric兩類砂缩。從功能上說(shuō)兩者完全等價(jià)作谚,兩者的唯一區(qū)別在于decimal不能用于帶有identity關(guān)鍵字的列。
聲明精確整數(shù)型數(shù)據(jù)的格式是numeric | decimal(p[,s])庵芭,其中p為精度妹懒,s為小數(shù)位數(shù),s的缺省值為0双吆。例如指定某列為精確整數(shù)型眨唬,精度為6会前,小數(shù)位數(shù)為3,即decimal(6,3)匾竿,那么若向某記錄的該列賦值56.342689時(shí)瓦宜,該列實(shí)際存儲(chǔ)的是56.3427。
decimal和numeric可存儲(chǔ)從 -1038 +1 到 1038 –1 的固定精度和小數(shù)位的數(shù)字?jǐn)?shù)據(jù)岭妖,它們的存儲(chǔ)長(zhǎng)度隨精度變化而變化临庇,最少為5字節(jié),最多為17字節(jié)昵慌。
l 精度為1~9時(shí)假夺,存儲(chǔ)字節(jié)長(zhǎng)度為5;
l 精度為10~19時(shí)斋攀,存儲(chǔ)字節(jié)長(zhǎng)度為9已卷;
l 精度為20~28時(shí),存儲(chǔ)字節(jié)長(zhǎng)度為13淳蔼;
l 精度為29~38時(shí)悼尾,存儲(chǔ)字節(jié)長(zhǎng)度為17。
例如若有聲明numeric(8,3)肖方,則存儲(chǔ)該類型數(shù)據(jù)需5字節(jié),而若有聲明numeric(22,5)未状,則存儲(chǔ)該類型數(shù)據(jù)需13字節(jié)俯画。
注意:聲明精確整數(shù)型數(shù)據(jù)時(shí),其小數(shù)位數(shù)必須小于精度司草;在給精確整數(shù)型數(shù)據(jù)賦值時(shí)艰垂,必須使所賦數(shù)據(jù)的整數(shù)部分位數(shù)不大于列的整數(shù)部分的長(zhǎng)度。
(3) 浮點(diǎn)型
浮點(diǎn)型也稱近似數(shù)值型埋虹。顧名思義猜憎,這種類型不能提供精確表示數(shù)據(jù)的精度,使用這種類型來(lái)存儲(chǔ)某些數(shù)值時(shí)搔课,有可能會(huì)損失一些精度胰柑,所以它可用于處理取值范圍非常大且對(duì)精確度要求不是十分高的數(shù)值量,如一些統(tǒng)計(jì)量爬泥。
有兩種近似數(shù)值數(shù)據(jù)類型:float[(n)]和real柬讨,兩者通常都使用科學(xué)計(jì)數(shù)法表示數(shù)據(jù),即形為:尾數(shù)E階數(shù)袍啡,如5.6432E20踩官,-2.98E10,1.287659E-9等境输。
l real:使用4字節(jié)存儲(chǔ)數(shù)據(jù)蔗牡,表數(shù)范圍為-3.40E + 38 到 3.40E + 38颖系,數(shù)據(jù)精度為7位有效數(shù)字。
l float:定義中的n取值范圍是1~53辩越,用于指示其精度和存儲(chǔ)大小嘁扼。當(dāng)n在1~24之間時(shí),實(shí)際上是定義了一個(gè)real型數(shù)據(jù)区匣,存儲(chǔ)長(zhǎng)度為4字節(jié)偷拔,精度為7位有效數(shù)字;當(dāng)n在25~53之間時(shí)亏钩,存儲(chǔ)長(zhǎng)度為8字節(jié)莲绰,精度為15位有效數(shù)字。當(dāng)缺省n時(shí)姑丑,代表n在25~53之間蛤签。float型數(shù)據(jù)的數(shù)范圍為- 1.79E+308 到 1.79E+308。
(4) 貨幣型
SQL Server提供了兩個(gè)專門用于處理貨幣的數(shù)據(jù)類型:money和smallmoney栅哀,它們用十進(jìn)制數(shù)表示貨幣值震肮。
l money:數(shù)據(jù)的數(shù)范圍為-263 (-922337203685477.5808)~263-1 (922337203685477.5807) ,其精度為19留拾,小數(shù)位數(shù)為4戳晌,長(zhǎng)度為8字節(jié)。money的數(shù)的范圍與bigint相同痴柔,不同的只是money型有4位小數(shù)沦偎,實(shí)際上,money就是按照整數(shù)進(jìn)行運(yùn)算的咳蔚,只是將小數(shù)點(diǎn)固定在末4位豪嚎。
l smallmoney:數(shù)范圍為 –231 (-2,147,48.3648) ~231 - 1 (2,147,48.3647) ,其精度為10谈火,小數(shù)位數(shù)為4侈询,長(zhǎng)度為4字節(jié)∨此#可見(jiàn)smallmoney與int的關(guān)系就如同money與bigint的關(guān)系扔字。
當(dāng)向表中插入money或smallmoney類型的值時(shí),必須在數(shù)據(jù)前面加上貨幣表示符號(hào)(的后面加上負(fù)號(hào)(-)荒揣。例如:680,$-20000.9088都是正確的貨幣數(shù)據(jù)表示形式系任。
(5) 位型
SQL Server中的位(bit)型數(shù)據(jù)相當(dāng)于其他語(yǔ)言中的邏輯型數(shù)據(jù)恳蹲,它只存儲(chǔ)0和1虐块,長(zhǎng)度為一個(gè)字節(jié)。但要注意嘉蕾,SQL Server對(duì)表中bit類型列的存儲(chǔ)作了優(yōu)化:如果一個(gè)表中有不多于 8 個(gè)的bit列贺奠,這些列將作為一個(gè)字節(jié)存儲(chǔ),如果表中有 9 到 16 個(gè) bit 列错忱,這些列將作為兩個(gè)字節(jié)存儲(chǔ)儡率,更多列的情況依此類推。
當(dāng)為bit類型數(shù)據(jù)賦0時(shí)以清,其值為0儿普,而賦非0(如100)時(shí),其值為1掷倔。
若表中某列為bit類型數(shù)據(jù)眉孩,那么該列不允許為空值(有關(guān)空值概念本節(jié)稍后即做介紹),并且不允許對(duì)其建立索引勒葱。
(6) 字符型
字符型數(shù)據(jù)用于存儲(chǔ)字符串浪汪,字符串中可包括字母胸囱、數(shù)字和其它特殊符號(hào)(如#袱耽、@、&等等)欣孤。在輸入字符串時(shí)凯旋,需將串中的符號(hào)用單引號(hào)或雙引號(hào)括起來(lái)殃姓,如’abc’、”Abc<Cde”瓦阐。
SQL Server字符型包括兩類:固定長(zhǎng)度 (char) 或可變長(zhǎng)度 (varchar) 字符數(shù)據(jù)類型。
l char[(n)]
定長(zhǎng)字符數(shù)據(jù)類型篷牌,其中n定義字符型數(shù)據(jù)的長(zhǎng)度睡蟋,n在1到8000之間,缺省為1枷颊。當(dāng)表中的列定義為char(n)類型時(shí)戳杀,若實(shí)際要存儲(chǔ)的串長(zhǎng)度不足n時(shí),則在串的尾部添加空格以達(dá)到長(zhǎng)度n夭苗,所以char(n)的長(zhǎng)度為n信卡。例如某列的數(shù)據(jù)類型為char(20),而輸入的字符串為”ahjm1922”题造,則存儲(chǔ)的是字符ahjm1922和12個(gè)空格傍菇。若輸入的字符個(gè)數(shù)超出了n,則超出的部分被截?cái)唷?br>
l varchar[(n)]
變長(zhǎng)字符數(shù)據(jù)類型界赔,其中n的規(guī)定與定長(zhǎng)字符型char中n完全相同丢习,但這里n表示的是字符串可達(dá)到的最大長(zhǎng)度牵触。varchar(n)的長(zhǎng)度為輸入的字符串的實(shí)際字符個(gè)數(shù),而不一定是n咐低。例如揽思,表中某列的數(shù)據(jù)類型為varchar(100),而輸入的字符串為”ahjm1922”见擦,則存儲(chǔ)的就是字符ahjm1922钉汗,其長(zhǎng)度為8字節(jié)。
當(dāng)列中的字符數(shù)據(jù)值長(zhǎng)度接近一致時(shí)鲤屡,例如姓名损痰,此時(shí)可使用 char;而當(dāng)列中的數(shù)據(jù)值長(zhǎng)度顯著不同時(shí)执俩,使用varchar較為恰當(dāng)徐钠,可以節(jié)省存儲(chǔ)空間。
(7) Unicode字符型
Unicode是“統(tǒng)一字符編碼標(biāo)準(zhǔn)”役首,用于支持國(guó)際上非英語(yǔ)語(yǔ)種的字符數(shù)據(jù)的存儲(chǔ)和處理尝丐。SQL Server的Unicode字符型可以存儲(chǔ)Unicode標(biāo)準(zhǔn)字符集定義的各種字符。
Unicode字符型包括nchar[(n)]和nvarchar[(n)]兩類衡奥。nchar是固定長(zhǎng)度 Unicode 數(shù)據(jù)的數(shù)據(jù)類型爹袁,nvarchar 是可變長(zhǎng)度 Unicode 數(shù)據(jù)的數(shù)據(jù)類型,二者均使用 UNICODE UCS-2 字符集矮固。
l nchar[(n)]:nchar[(n)]為包含n個(gè)字符的固定長(zhǎng)度 Unicode 字符型數(shù)據(jù)失息,n 的值在 1 與 4,000 之間,缺省為1档址。長(zhǎng)度為2n字節(jié)盹兢。若輸入的字符串長(zhǎng)度不足n,將以空白字符補(bǔ)足守伸。
l nvarchar[(n)]:nvarchar[(n)]為最多包含n個(gè)字符的可變長(zhǎng)度 Unicode 字符型數(shù)據(jù)绎秒,n 的值在 1 與 4,000之間,缺省為1尼摹。長(zhǎng)度是所輸入字符個(gè)數(shù)的兩倍见芹。
實(shí)際上,nchar蠢涝、nvarchar與char玄呛、varchar的使用非常相似,只是字符集不同(前者使用Unicode字符集和二,后者使用ASCII字符集)徘铝。
(8) 文本型
當(dāng)需要存儲(chǔ)大量的字符數(shù)據(jù),如較長(zhǎng)的備注、日志信息等等庭砍,字符型數(shù)據(jù)的最長(zhǎng)8000個(gè)字符的限制可能使它們不能滿足這種應(yīng)用需求场晶,此時(shí)可使用文本型數(shù)據(jù)。
文本型包括text和ntext兩類怠缸,分別對(duì)應(yīng)ASCII字符和Unicode字符诗轻。text類型可以表示最大長(zhǎng)度為 231-1 (2,147,483,647) 個(gè)字符,其數(shù)據(jù)的存儲(chǔ)長(zhǎng)度為實(shí)際字符數(shù)個(gè)字節(jié)揭北。ntext可表示最大長(zhǎng)度為 230 - 1 (1,073,741,823) 個(gè)Unicode字符扳炬,其數(shù)據(jù)的存儲(chǔ)長(zhǎng)度是實(shí)際字符個(gè)數(shù)的兩倍(以字節(jié)為單位)搔体。
(9) 二進(jìn)制型
二進(jìn)制數(shù)據(jù)類型表示的是位數(shù)據(jù)流,包括binary(固定長(zhǎng)度)和varbinary(可變長(zhǎng)度)兩種疚俱。
l binary [(n) ]:固定長(zhǎng)度的n個(gè)字節(jié)二進(jìn)制數(shù)據(jù)。n取值范圍為 1 到 8,000呆奕,缺省為1养晋。binary(n)數(shù)據(jù)的存儲(chǔ)長(zhǎng)度為 n+4 字節(jié)。若輸入的數(shù)據(jù)長(zhǎng)度小于n梁钾,則不足部分用0填充绳泉;若輸入的數(shù)據(jù)長(zhǎng)度大于n,則多余部分被截?cái)唷?br>
輸入二進(jìn)制值時(shí)姆泻,在數(shù)據(jù)前面要加上0x零酪,可以用的數(shù)字符號(hào)為0—9、A—F(字母大小寫均可)拇勃。因此四苇,二進(jìn)制數(shù)據(jù)有時(shí)也被稱為十六進(jìn)制數(shù)據(jù)。例如0xFF方咆、0x12A0分別表示值FF和12A0月腋。因?yàn)槊孔止?jié)的數(shù)最大為FF,故在“0x”格式的數(shù)據(jù)每?jī)晌徽?個(gè)字節(jié)峻呛。
l varbinary [(n) ]:n個(gè)字節(jié)變長(zhǎng)二進(jìn)制數(shù)據(jù)。n取值范圍為 1 到 8,000辜窑,缺省為1钩述。varbinary(n)數(shù)據(jù)的存儲(chǔ)長(zhǎng)度為實(shí)際輸入數(shù)據(jù)長(zhǎng)度+4個(gè)字節(jié)。
(10) 日期時(shí)間類型
日期時(shí)間類型數(shù)據(jù)用于存儲(chǔ)日期和時(shí)間信息穆碎,包括datetime和smalldatetime兩類牙勘。
l datetime:datetime類型可表示的日期范圍從 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和時(shí)間數(shù)據(jù),精確度為百分之三秒(3.33 毫秒或 0.00333 秒),例如1到3毫秒的值都表示為0毫秒方面,4到6毫秒的值都表示為4毫秒放钦。
datetime類型數(shù)據(jù)長(zhǎng)度為8字節(jié),日期和時(shí)間分別使用4個(gè)字節(jié)存儲(chǔ)恭金。前4 字節(jié)用于存儲(chǔ)datetime類型數(shù)據(jù)中距1900 年 1 月 1 日的天數(shù)操禀,為正數(shù)表示日期在1900年1月1日之后,為負(fù)數(shù)則表示日期在1900年1月1日之前横腿。后4個(gè)字節(jié)用于存儲(chǔ)datetime類型數(shù)據(jù)中距12:00(24小時(shí)制)的毫秒數(shù)颓屑。
用戶以字符串形式輸入datetime類型數(shù)據(jù),系統(tǒng)也以字符串形式輸出datetime類型數(shù)據(jù)耿焊,將用戶輸入到系統(tǒng)以及系統(tǒng)輸出的datetime類型數(shù)據(jù)的字符串形式稱為datetime類型數(shù)據(jù)的“外部形式”揪惦,而將datetime在系統(tǒng)內(nèi)的存儲(chǔ)形式稱為“內(nèi)部形式”,SQL Server負(fù)責(zé)datetime類型數(shù)據(jù)的兩種表現(xiàn)形式之間的轉(zhuǎn)換罗侯,包括合法性檢查器腋。
用戶給出datetime類型數(shù)據(jù)值時(shí),日期部分和時(shí)間部分分別給出钩杰。
日期部分的表示形式常用的格式如下:
年 月 日 2001 Jan 20纫塌、2001 Janary 20
年 日 月 2001 20 Jan
月 日[,]年 Jan 20 2001、Jan 20,2001榜苫、Jan 20,01
月 年 日 Jan 2001 20
日 月[,]年 20 Jan 2001护戳、20 Jan,2001
日 年 月 20 2001 Jan
年(4位數(shù)) 2001表示2001年1月1日
年月日 20010120媳荒、010120
月/日/年 01/20/01驹饺、1/20/01、01/20/2001鱼炒、1/20/2001
月-日-年 01-20-01昔瞧、1-20-01菩佑、01-20-2001、1-20-2001
月.日.年 01.20.01酬荞、1.20.01、01.20.2001枪向、1.20.2001
說(shuō)明:年可用4位或2位表示咧党,月和日可用1位或2位表示凿傅。
時(shí)間部分常用的表示格式如下:
時(shí):分 10:20、08:05
時(shí):分:秒 20:15:18辨液、20:15:18.2
時(shí):分:秒:毫秒 20:15:18:200
時(shí):分AM|PM 10:10AM箱残、10:10PM
l smalldatetime:smalldatetime類型數(shù)據(jù)可表示從 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和時(shí)間被辑,數(shù)據(jù)精確到分鐘,即29.998 秒或更低的值向下舍入為最接近的分鐘谈山,29.999 秒或更高的值向上舍入為最接近的分鐘宏怔。Smalldatetime類型數(shù)據(jù)的存儲(chǔ)長(zhǎng)度為4字節(jié)臊诊,前2個(gè)字節(jié)用來(lái)存儲(chǔ)smalldatetime類型數(shù)據(jù)中日期部分距1900年1月1日之后的天數(shù);后2個(gè)字節(jié)用來(lái)存儲(chǔ)smalldatetime類型數(shù)據(jù)中時(shí)間部分距中午12點(diǎn)的分鐘數(shù)触机。
用戶輸入smalldatetime類型數(shù)據(jù)的格式與datetime類型數(shù)據(jù)完全相同儡首,只是它們的內(nèi)部存儲(chǔ)可能不相同偏友。
(11) 時(shí)間戳型
標(biāo)識(shí)符是timestamp约谈。若創(chuàng)建表時(shí)定義一個(gè)列的數(shù)據(jù)類型為時(shí)間戳類型,那么每當(dāng)對(duì)該表加入新行或修改已有行時(shí)泼橘,都由系統(tǒng)自動(dòng)將一個(gè)計(jì)數(shù)器值加到該列炬灭,即將原來(lái)的時(shí)間戳值加上一個(gè)增量靡菇。記錄timestamp列的值實(shí)際上反映了系統(tǒng)對(duì)該記錄修改的相對(duì)(相對(duì)于其他記錄)順序。一個(gè)表只能有一個(gè)timestamp 列鼻吮。Timestamp類型數(shù)據(jù)的值實(shí)際上是二進(jìn)制格式數(shù)據(jù)椎木,其長(zhǎng)度為8字節(jié)博烂。
(12) 圖象數(shù)據(jù)類型
標(biāo)識(shí)符是image禽篱,它用于存儲(chǔ)圖片、照片等玛界。實(shí)際存儲(chǔ)的是可變長(zhǎng)度二進(jìn)制數(shù)據(jù)脚仔,介于 0 與 231-1 (2,147,483,647) 字節(jié)之間舆绎。
(13) 其它數(shù)據(jù)類型
除了上面所介紹的常用數(shù)據(jù)類型外,SQL Server 2000還提供了其它幾種數(shù)據(jù)類型:cursor猎醇、sql_variant努溃、table和uniqueidentifier。
Cursor:是游標(biāo)數(shù)據(jù)類型沦疾,用于創(chuàng)建游標(biāo)變量或定義存儲(chǔ)過(guò)程的輸出參數(shù)。
Sql_variant:是一種存儲(chǔ) SQL Server 支持的各種數(shù)據(jù)類型(除text刨秆、ntext忆畅、image家凯、timestamp 和 sql_variant 外)值的數(shù)據(jù)類型。Sql_variant的最大長(zhǎng)度可達(dá) 8016 字節(jié)绊诲。
Table:是用于存儲(chǔ)結(jié)果集的數(shù)據(jù)類型掂之,結(jié)果集可以供后續(xù)處理。
Uniqueidentifier:是唯一標(biāo)識(shí)符類型橄镜。系統(tǒng)將為這種類型的數(shù)據(jù)產(chǎn)生唯一標(biāo)識(shí)值冯乘,它是一個(gè)16字節(jié)長(zhǎng)的二進(jìn)制數(shù)據(jù)裆馒。