sqlserver常用数据类型(精炼版)
一:系統(tǒng)數(shù)據(jù)類型
2.浮點(diǎn)數(shù)據(jù)類型
3.字符數(shù)據(jù)類型
4.日期和時(shí)間數(shù)據(jù)類型
5.文本和圖形數(shù)據(jù)類型
6.貨幣數(shù)據(jù)類型
7.位數(shù)據(jù)類型
8.二進(jìn)制數(shù)據(jù)類型
9.其他數(shù)據(jù)類型
二:自定義數(shù)據(jù)類型
數(shù)據(jù)類型是一種屬性,用于指定對(duì)象可保存的數(shù)據(jù)的類型,SQL Server中支持多種數(shù)據(jù)類型,包括字符類型、數(shù)值類型以及日期類型等。數(shù)據(jù)類型相當(dāng)于一個(gè)容器,容器的大小決定了裝的東西的多少,將數(shù)據(jù)分為不同的類型可以節(jié)省磁盤空間和資源。
Sql Server 還能自動(dòng)限制每個(gè)數(shù)據(jù)類型的取值范圍,例如定義了一個(gè)類型為int的字段,如果插入數(shù)據(jù)時(shí)插入的值的大小在smallint或者tinyint范圍之內(nèi), Sql Server 會(huì)自動(dòng)將類型轉(zhuǎn)換為smallint 或者tinyint,這樣一來(lái),在存儲(chǔ)數(shù)據(jù)時(shí),占用的存儲(chǔ)空間只有int的1/2或則1/4.
Sql Server數(shù)據(jù)庫(kù)管理系統(tǒng)中的數(shù)據(jù)類型可以分為兩類,分別是:系統(tǒng)默認(rèn)的數(shù)據(jù)類型和用戶自定義的數(shù)據(jù)類型。下面分別介紹這兩大類數(shù)據(jù)類型的內(nèi)容.
回到頂部
一:系統(tǒng)數(shù)據(jù)類型
Sql Server 提供的系統(tǒng)數(shù)據(jù)類型有一下幾大類,共25種。 Sql Server會(huì)自動(dòng)限制每個(gè)系統(tǒng)數(shù)據(jù)類型的取值范圍,當(dāng)插入數(shù)據(jù)庫(kù)中的值 超過(guò)了數(shù)據(jù)允許的范圍時(shí), Sql Server 就會(huì)報(bào)錯(cuò)。
1.整數(shù)數(shù)據(jù)類型
整數(shù)數(shù)據(jù)類型是常用的數(shù)據(jù)類型之一,主要用于存儲(chǔ)數(shù)值,可以直接進(jìn)行數(shù)據(jù)運(yùn)算而不必使用函數(shù)轉(zhuǎn)換.
(1).bigint
每個(gè)bigint存儲(chǔ)在8個(gè)字節(jié)中,其中一個(gè)二進(jìn)制位表示符號(hào)位,其它63個(gè)二進(jìn)制位表示長(zhǎng)度和大小,可以表示-2的63次方~2的63次方-1范圍內(nèi)的所有整數(shù)。
(2).int
int或者integer,每個(gè)int存儲(chǔ)在4個(gè)字節(jié)中,其中一個(gè)二進(jìn)制位表示符號(hào)位,其它31個(gè)二進(jìn)制位表示長(zhǎng)度和大小,,可以表示-2的31次方~2的31次方-1范圍內(nèi)的所有整數(shù)。
(3).smallint
每個(gè)smallint類型的數(shù)據(jù)占用了兩個(gè)字節(jié)的存儲(chǔ)空間,其中一個(gè)二進(jìn)制位表示整數(shù)值的正負(fù)號(hào),其它15個(gè)二進(jìn)制位表示長(zhǎng)度和大小,,可以表示-2的15次方~2的15次方-1范圍內(nèi)的所有整數(shù)。
(4).tinyint
每個(gè)tinyint類型的數(shù)據(jù)占用了一個(gè)字節(jié)的存儲(chǔ)空間,可以表示0~255范圍內(nèi)的所有整數(shù).
回到頂部
2.浮點(diǎn)數(shù)據(jù)類型
浮點(diǎn)數(shù)據(jù)類型存儲(chǔ)十進(jìn)制小數(shù),用于表示浮點(diǎn)數(shù)值數(shù)據(jù)的大致數(shù)值數(shù)據(jù)類型。浮點(diǎn)數(shù)據(jù)為近似值;浮點(diǎn)數(shù)值的數(shù)據(jù)則Sql Server中采用了只入不舍的方式進(jìn)行存儲(chǔ),即當(dāng)且僅當(dāng)要舍入的數(shù)是一個(gè)非零數(shù)時(shí),對(duì)其保留數(shù)字部分的最低有效位上加1,并進(jìn)行必要的近位。
(1).real
可以存儲(chǔ)正的或者負(fù)的十進(jìn)制數(shù)值,它的存儲(chǔ)范圍從-3.40E+38~-1.18E-38、0以及1.18E-38~3.40E+38.每個(gè)real類型的數(shù)據(jù)占用4個(gè)字節(jié)的存儲(chǔ)空間。
(2)float[(n)]
其中為用于存儲(chǔ)float數(shù)值尾數(shù)的位數(shù)(以科學(xué)計(jì)數(shù)法表示),因此可以確定精度和存儲(chǔ)大小。如果指定了n它必須是介于1和53之間的某個(gè)值。n的默認(rèn)值為53.
其范圍從-1.79E+308~-2.23E-308、0以及2.23E+308~1.79E-308。如果不指定數(shù)據(jù)類型float的長(zhǎng)度,它占用8個(gè)字節(jié)的存儲(chǔ)空間。float數(shù)據(jù)類型可以寫成float(n)的形式,n為指定float數(shù)據(jù)的精度,n為1~53之間的整數(shù)值。當(dāng)n取1~24時(shí),實(shí)際上定義了一個(gè)real類型的數(shù)據(jù),系統(tǒng)用4個(gè)自己存儲(chǔ)它。當(dāng)n取25~53時(shí),系統(tǒng)認(rèn)為其是float類型,用8個(gè)字節(jié)存儲(chǔ)它。
(3).decimal[(p[,s])]和numeric[(p[,s])
帶固定精度和小數(shù)位數(shù)的數(shù)值數(shù)據(jù)類型。使用最大精度時(shí),有效值從-10^38+1~10^38-1。numeric在功能上等價(jià)于decimal。
p(精度)指定了最多可以存儲(chǔ)十進(jìn)制數(shù)字的總位數(shù),包括小數(shù)點(diǎn)左邊和右邊的位數(shù),該精度必須是從1到最大精度38之間的值,默認(rèn)精度為18.
s(小數(shù)位數(shù))指定小數(shù)點(diǎn)右邊可以存儲(chǔ)的十進(jìn)制數(shù)字的最大位數(shù),小數(shù)位數(shù)必須是從0到p之間的值,僅在指定精度后才可以指定小數(shù)的位數(shù)。默認(rèn)小數(shù)位數(shù)是0;因此,0<=s<=p。最大存儲(chǔ)大小基于精度而變化。例如:decimal(10,5)表示共有10位數(shù),其中整數(shù)5位,小數(shù)5位。
回到頂部
3.字符數(shù)據(jù)類型
字符數(shù)據(jù)類也是Sql Server中最常用的數(shù)據(jù)類型之一,用來(lái)存儲(chǔ)各種字符,數(shù)字符號(hào)和特殊符號(hào)。在使用字符數(shù)據(jù)類型時(shí),需要在其前后加上英文單引號(hào)或者雙引號(hào)。
(1)char(n)
當(dāng)用char數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)時(shí),每個(gè)字符和符號(hào)占用一個(gè)字節(jié)存儲(chǔ)空間,n表示所有字符所占的存儲(chǔ)空間,n的取值為1~8000。如不指定n的值,系統(tǒng)默認(rèn)n的值為1。若輸入數(shù)據(jù)的字符串長(zhǎng)度小于n,則系統(tǒng)自動(dòng)在其后添加空格來(lái)填滿設(shè)定好的空間;若輸入的數(shù)據(jù)過(guò)長(zhǎng),則會(huì)截掉其超出部分。
(2). varhcar(n|max)
n為存儲(chǔ)字符的最大長(zhǎng)度,其取值范圍是1~8000,但可根據(jù)實(shí)際存儲(chǔ)的字符數(shù)改變存儲(chǔ)空間,max表示最大存儲(chǔ)大小是2的31次方-1個(gè)字節(jié)。存儲(chǔ)大小是輸入數(shù)據(jù)的實(shí)際長(zhǎng)度加2個(gè)字節(jié)。所輸入數(shù)據(jù)的長(zhǎng)度可以為0個(gè)字符。如varchcar(20),則對(duì)應(yīng)的變量最多只能存儲(chǔ)20個(gè)字符,不夠20個(gè)字符的按實(shí)際存儲(chǔ)。
(3).nchar(n)
n個(gè)字符的固定長(zhǎng)度Unicode字符數(shù)據(jù)。n值必須在1~4000之間(含),如果沒(méi)有數(shù)據(jù)定義的或變量聲明語(yǔ)句中指定n,默認(rèn)長(zhǎng)度為1。此數(shù)據(jù)類型采用Unicode字符集,因此每一個(gè)存儲(chǔ)單位占兩個(gè)字節(jié),可將全世界文字囊括在內(nèi)(當(dāng)然除了部分生僻字)。
(4)nvarchar(n|max)
與varchar類似,存儲(chǔ)可變長(zhǎng)度Unicode字符數(shù)據(jù)。n值必須在1~4000之間(含),如果沒(méi)有數(shù)據(jù)定義的或變量聲明語(yǔ)句中指定n,默認(rèn)長(zhǎng)度為1。max指最大存儲(chǔ)大小為2的31次方-1字節(jié)。存儲(chǔ)大小是輸入字符個(gè)數(shù)的兩倍+2個(gè)字節(jié)。所輸入的數(shù)據(jù)長(zhǎng)度可以為0個(gè)字符.
回到頂部
4.日期和時(shí)間數(shù)據(jù)類型
(1).date
存儲(chǔ)用字符串表示的日期數(shù)據(jù),可以表示0001-01-01~9999-12-31(公元元年1月1日到公元9999年12月31日)間的任意日期值。數(shù)據(jù)格式為“YYYY-MM-DD”:
YYYY:表示年份的四位數(shù)字,范圍為0001~9999;
MM:表示指定年份中月份的兩位數(shù)字,范圍為01~12;
DD:表示指定月份中某一天的兩位數(shù)字,范圍為01~31(最高值取決于具體月份)
該數(shù)據(jù)類型占用3個(gè)字節(jié)的空間。
(2).time
以字符串形式記錄一天的某個(gè)時(shí)間,取值范圍為00:00:00.0000000~23:59:59.9999999,數(shù)據(jù)格式為“hh:mm:ss[.nnnnnnn]”:
hh:表示小時(shí)的兩位數(shù)字,范圍為0~23。
mm:表示分鐘的兩位數(shù)字,范圍為0~59。
ss:表示秒的兩位數(shù)字,范圍為0~59。
n*是0~7為數(shù)字,范圍為0~9999999,它表示秒的小部分.
time值在存儲(chǔ)時(shí)占用5個(gè)字節(jié)的空間。
(3).datetime
用于存儲(chǔ)時(shí)間和日期數(shù)據(jù),從1753年1月1日到9999年12月31日,默認(rèn)值為1900-01-01 00:00:00,當(dāng)插入數(shù)據(jù)或在其它地方使用時(shí),需用單引號(hào)或雙引號(hào)括起來(lái)。可以使用“/”、“-”和“.”作為分隔符。該類型數(shù)據(jù)占用8個(gè)字節(jié)的空間。
(4).datetime2
datetime的擴(kuò)展類型,其數(shù)據(jù)范圍更大,默認(rèn)的最小精度最高,并具有可選的用戶定義的精度。默認(rèn)格式為:YYYY-MM-DD hh:mm:ss[.fractional seconds],日期的存取范圍是0001-01-01~9999-12-31(公元元年1月1日到公元9999年12月31日).
(5).smalldatetime
smalldatetime類型與datetime類型相似,只是其存儲(chǔ)范圍是從1900年1月1日到2079年6月6日,當(dāng)日期時(shí)間精度較小時(shí),刻印使用smalldatetime,該類型數(shù)據(jù)占用4個(gè)字節(jié)的存儲(chǔ)空間。
(6).datetimeoffset
用于定義一個(gè)采用24小時(shí)制與日期相組合并可識(shí)別時(shí)區(qū)的時(shí)間。默認(rèn)格式是:“YYYY-MM-DD hh:mm:ss[.nnnnnnn][{+|-}hh:mm]”:
hh:兩位數(shù),范圍是-14~14
mm:兩位數(shù),范圍為00~59;
這里hh是時(shí)區(qū)偏移量,該類型數(shù)據(jù)中保存的是世界標(biāo)準(zhǔn)時(shí)間(UTC)值,eg:要存儲(chǔ)北京時(shí)間2011年11月11日12點(diǎn)整,存儲(chǔ)時(shí)該值將是2011-11-11 12:00:00+08:00,因?yàn)楸本┨幱跂|八區(qū),比UTC早8個(gè)小時(shí)。存儲(chǔ)該數(shù)據(jù)類型數(shù)據(jù)時(shí)默認(rèn)占用10個(gè)字節(jié)大小的固定存儲(chǔ)空間.
回到頂部
5.文本和圖形數(shù)據(jù)類型
(1).text
用于存儲(chǔ)文本數(shù)據(jù),服務(wù)器代碼頁(yè)中長(zhǎng)度可變的非Unicode數(shù)據(jù),最大長(zhǎng)度為2的31次方-1(2147 483 647)個(gè)字符。當(dāng)服務(wù)器代碼頁(yè)使用雙字節(jié)字符時(shí),存儲(chǔ)仍是2147 483 647字節(jié)。
(2)ntext
與text類型作用相同,為長(zhǎng)度可變的非Unicode數(shù)據(jù),最大長(zhǎng)度為2的30次方-1(1073 741 283)個(gè)字符。存儲(chǔ)大小是所輸入字符個(gè)數(shù)的兩倍(以字節(jié)為單位).
(3).image
長(zhǎng)度可變的二進(jìn)制數(shù)據(jù),范圍為:0~2的31次方-1個(gè)字節(jié)。用于存儲(chǔ)照片、目錄圖片或者圖畫(huà),容量也是2147 483 647個(gè)字節(jié),由系統(tǒng)根據(jù)數(shù)據(jù)的長(zhǎng)度自動(dòng)分配空間,存儲(chǔ)該字段的數(shù)據(jù)一般不能使用insert語(yǔ)句直接輸入。
回到頂部
6.貨幣數(shù)據(jù)類型
(1).money
用于存儲(chǔ)貨幣值,取值范圍為正負(fù)922 337 213 685 477.580 8之間。money數(shù)據(jù)類型中整數(shù)部分包含19個(gè)數(shù)字,小數(shù)部分包含4個(gè)數(shù)字,因此money數(shù)據(jù)類型的精度是19,存儲(chǔ)時(shí)占用8個(gè)字節(jié)的存儲(chǔ)空間。
(2).smallmoney
與money類型相似,取值范圍為214 748.346 8之間,smallmoney存儲(chǔ)時(shí)占用4個(gè)字節(jié)存儲(chǔ)空間。輸入數(shù)據(jù)時(shí)在前面加上一個(gè)貨幣符號(hào),如人民幣為¥或其它定義的貨幣符號(hào)。
回到頂部
7.位數(shù)據(jù)類型
bit稱為位數(shù)據(jù)類型,只取0或1為值,長(zhǎng)度1字節(jié)。bit值經(jīng)常當(dāng)作邏輯值用于判斷true(1)或false(0),輸入非0值時(shí)系統(tǒng)將其替換為1。
回到頂部
8.二進(jìn)制數(shù)據(jù)類型
(1)binary(n)
長(zhǎng)度為n個(gè)字節(jié)的固定長(zhǎng)度二進(jìn)制數(shù)據(jù),其中n是從1~8000的值。存儲(chǔ)大小為n個(gè)字節(jié)。在輸入binary值時(shí),必須在前面帶0x,可以使用0xAA5代表AA5,如果輸入數(shù)據(jù)長(zhǎng)度大于定于的長(zhǎng)度,超出的部分會(huì)被截?cái)唷?br />(2).varbinary(n|max)
可變長(zhǎng)度二進(jìn)制數(shù)據(jù)。其中n是從1~8000的值,max指示存儲(chǔ)大小為2的31次方-1字節(jié)。存儲(chǔ)大小為所輸入數(shù)據(jù)的實(shí)際長(zhǎng)度+2個(gè)字節(jié)。
在定義的范圍內(nèi),不論輸入的時(shí)間長(zhǎng)度是多少,binary類型的數(shù)據(jù)都占用相同的存儲(chǔ)空間,即定義時(shí)空間,而對(duì)于varbinary類型的數(shù)據(jù),在存儲(chǔ)時(shí)實(shí)際值的長(zhǎng)度使用存儲(chǔ)空間.
回到頂部
9.其他數(shù)據(jù)類型
(1).rowversion
每個(gè)數(shù)據(jù)都有一個(gè)計(jì)數(shù)器,當(dāng)對(duì)數(shù)據(jù)庫(kù)中包含rowversion列的表執(zhí)行插入或者更新操作時(shí),該計(jì)數(shù)器數(shù)值就會(huì)增加。此計(jì)數(shù)器是數(shù)據(jù)庫(kù)行版本。一個(gè)表只能有一個(gè)rowversion列。每次修改或者插入包含rowversion列的行時(shí),就會(huì)在rowversion列中插入經(jīng)過(guò)增量的數(shù)據(jù)庫(kù)行版本值。
公開(kāi)數(shù)據(jù)庫(kù)中自動(dòng)生成的唯一二進(jìn)制數(shù)字的數(shù)據(jù)類型。rowversion通常用作給表行加版本戳的機(jī)制。存儲(chǔ)大小為8個(gè)字節(jié)。rowversion數(shù)據(jù)類型只是遞增的數(shù)字,不保留日期或時(shí)間。
(2)timestamp
時(shí)間戳數(shù)據(jù)類型,timestamp的數(shù)據(jù)類型為rowversion數(shù)據(jù)類型的同義詞,提供數(shù)據(jù)庫(kù)范圍內(nèi)的唯一值,反映數(shù)據(jù)修改的唯一順序,是一個(gè)單調(diào)上升的計(jì)數(shù)器,此列的值被自動(dòng)更新。
在create table或alter table 語(yǔ)句中不必為提么timestamp數(shù)據(jù)類型指定列名。
eg:create table testTable (id int primary key,timestamp );
此時(shí)Sql Server數(shù)據(jù)庫(kù)引擎將生成timestamp列名;但rowversion不具備這樣的行為,在使用rowversion時(shí),必須指定列名.
(3).uniqueidentifier
16字節(jié)的GUID(Globally Unique Identifier,全球唯一標(biāo)識(shí)符),是Sql Server根據(jù)網(wǎng)絡(luò)適配器地址和主機(jī)CPU時(shí)鐘產(chǎn)生的唯一號(hào)碼,其中,每個(gè)為都是0~9或a~f范圍內(nèi)的十六進(jìn)制數(shù)字。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF,此號(hào)碼可以通過(guò)newid()函數(shù)獲得,在全世界各地的計(jì)算機(jī)由次函數(shù)產(chǎn)生的數(shù)字不會(huì)相同。
(4).cursor
游標(biāo)數(shù)據(jù)類型,該類型類似與數(shù)據(jù)表,其保存的數(shù)據(jù)中的包含行和列值,但是沒(méi)有索引,游標(biāo)用來(lái)建立一個(gè)數(shù)據(jù)的數(shù)據(jù)集,每次處理一行數(shù)據(jù)。
(5).sql_variant
用于存儲(chǔ)除文本,圖形數(shù)據(jù)和timestamp數(shù)據(jù)外的其它任何合法的Sql Server數(shù)據(jù),可以方便Sql Server的開(kāi)發(fā)工作。
(6).table
用于存儲(chǔ)對(duì)表或視圖處理后的結(jié)果集。這種新的數(shù)據(jù)類型使得變量可以存儲(chǔ)一個(gè)表,從而使函數(shù)或過(guò)程返回查詢結(jié)果更加方便、快捷。
(7).xml
存儲(chǔ)xml數(shù)據(jù)的數(shù)據(jù)類型。可以在列中或者xml類型的變量中存儲(chǔ)xml實(shí)例。存儲(chǔ)的xml數(shù)據(jù)類型表示實(shí)例大小不能超過(guò)2GB。
回到頂部
二:自定義數(shù)據(jù)類型
Sql Server允許用戶自定義數(shù)據(jù)類型,用戶自定義數(shù)據(jù)類型是建立在Sql Server系統(tǒng)數(shù)據(jù)類型的基礎(chǔ)上的,自定義的數(shù)據(jù)類型使得數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠根據(jù)需要定義符合自己開(kāi)發(fā)需求的數(shù)據(jù)類型。自定義數(shù)據(jù)類型雖然使用比較方便,但是需要大量的性能開(kāi)銷,所以使用時(shí)要謹(jǐn)慎。當(dāng)用戶定義一種數(shù)據(jù)類型時(shí),需要指定該類型的名稱、所基于的系統(tǒng)數(shù)據(jù)類型以及是否允許為空等。Sql Server為用戶提供了兩種方法來(lái)創(chuàng)建自定義數(shù)據(jù)類型。下面分別介紹這兩種個(gè)定義數(shù)據(jù)類型的方法。
(1).使用對(duì)象資源管理器創(chuàng)建用戶自定義數(shù)據(jù)類型
創(chuàng)建數(shù)據(jù)庫(kù)Test-->【可編程性】-->【類型】節(jié)點(diǎn),右擊【用戶定義數(shù)據(jù)類型】節(jié)點(diǎn),在彈出的框中,按照說(shuō)明相應(yīng)操作即可。很簡(jiǎn)單,就不截圖贅述了。
(2).使用存儲(chǔ)過(guò)程創(chuàng)建用戶自定義數(shù)據(jù)類型
觸雷使用圖形界面創(chuàng)建自定義數(shù)據(jù)類型,Sql Server中的系統(tǒng)存儲(chǔ)過(guò)程sp_addtype也可為用戶提供使用T_sql語(yǔ)句創(chuàng)建自定義數(shù)據(jù)類型的方法。其語(yǔ)法如下:
sp_addtype [@typename= ] type,
[@phystyle=] system_data_type
[,[@nulltype =] 'null_type']
其中,各參數(shù)的含義如下:
type:用于指定用戶定義的數(shù)據(jù)類型的名稱。
system_data_type:用于指定相應(yīng)的系統(tǒng)提供的數(shù)據(jù)類型的名稱及定義。注意:未能使用timestamp數(shù)據(jù)類型,當(dāng)所使用的系統(tǒng)數(shù)據(jù)類型有額外的說(shuō)明時(shí),需要用引號(hào)將其括起來(lái)。
null_type:用于指定用戶自定義的的數(shù)據(jù)類型的null屬性,其值可為“null” 、“not null“或”notnull“。默認(rèn)時(shí)與系統(tǒng)默認(rèn)的null屬性相同。用戶自定義的數(shù)據(jù)類型的名稱在數(shù)據(jù)庫(kù)中應(yīng)該是唯一的。
eg:sp_addtype homeAddress 'varchar(120)','not null'
刪除用戶自定義數(shù)據(jù)類型:
a.用圖形界面刪除,不做贅述。
b.用系統(tǒng)存儲(chǔ)過(guò)程sp_droptype刪除. eg:sp_droptype homeAddress,其中homeAddress為用戶自定義數(shù)據(jù)類型名稱.
注意:數(shù)據(jù)庫(kù)正在使用的用戶自定義數(shù)據(jù)類型,不能被刪除。
作者:阿赫瓦里
出處:http://www.cnblogs.com/selene/
本文以學(xué)習(xí)、研究和分享為主,版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,如果文中有不妥或者錯(cuò)誤的地方還望大神您不吝指出。如果覺(jué)得本文對(duì)您有所幫助不如【推薦】一下吧!如果你有更好的建議,不如留言一起討論,共同進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的sqlserver常用数据类型(精炼版)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 原神巧像入帧第一关攻略
- 下一篇: 自动化运维之使用Python3收发电子邮