數據類型是數據的一種屬性,表示數據所表示信息的類型。任何一種計算機語言都定義了自己的數據類型。當然,不同的程序語言都具有不同的特點,所定義的數據類型的各類和名稱都或多或少有些不同。SQLServer提供了25種數據類型:
·Binary[(n)]
·Varbinary[(n)]
·Char[(n)]
·Varchar[(n)]
·Nchar[(n)]
·Nvarchar[(n)]
·Datetime
·Smalldatetime
·Decimal[(p[,s])]
·Numeric[(p[,s])]
·Float[(n)]
·Real
·Int
·Smallint
·Tinyint
·Money
·Smallmoney
·Bit
·Cursor
·Sysname
·Timestamp
·Uniqueidentifier
·Text
·Image
·Ntext
(1)二進制數據類型
二進制數據包括Binary、Varbinary和Image
Binary數據類型既可以是固定長度的(Binary),也可以是變長度的。
Binary[(n)]是n位固定的二進制數據。其中,n的取值范圍是從1到8000。其存儲窨的大小是n+4個字節。
Varbinary[(n)]是n位變長度的二進制數據。其中,n的取值范圍是從1到8000。其存儲窨的大小是n+4個字節,不是n個字節。
在Image數據類型中存儲的數據是以位字符串存儲的,不是由SQLServer解釋的,必須由應用程序來解釋。例如,應用程序可以使用BMP、TIEF、GIF和JPEG格式把數據存儲在Image數據類型中。
(2)字符數據類型
字符數據的類型包括Char,Varchar和Text
字符數據是由任何字母、符號和數字任意組合而成的數據。
Varchar是變長字符數據,其長度不超過8KB。Char是定長字符數據,其長度最多為8KB。超過8KB的ASCII數據可以使用Text數據類型存儲。例如,因為Html文檔全部都是ASCII字符,并且在一般情況下長度超過8KB,所以這些文檔可以Text數據類型存儲在SQLServer中。
(3)Unicode數據類型
Unicode數據類型包括Nchar,Nvarchar和Ntext
在MicrosoftSQLServer中,傳統的非Unicode數據類型允許使用由特定字符集定義的字符。在SQLServer安裝過程中,允許選擇一種字符集。使用Unicode數據類型,列中可以存儲任何由Unicode標準定義的字符。在Unicode標準中,包括了以各種字符集定義的全部字符。使用Unicode數據類型,所戰勝的窨是使用非Unicode數據類型所占用的窨大小的兩倍。
在SQLServer中,Unicode數據以Nchar、Nvarchar和Ntext數據類型存儲。使用這種字符類型存儲的列可以存儲多個字符集中的字符。當列的長度變化時,應該使用Nvarchar字符類型,這時最多可以存儲4000個字符。當列的長度固定不變時,應該使用Nchar字符類型,同樣,這時最多可以存儲4000個字符。當使用Ntext數據類型時,該列可以存儲多于4000個字符。
(4)日期和時間數據類型
日期和時間數據類型包括Datetime和Smalldatetime兩種類型
日期和時間數據類型由有效的日期和時間組成。例如,有效的日期和時間數據包括“4/01/9812:15:00:00:00PM”和“1:28:29:15:01AM8/17/98”。前一個數據類型是日期在前,時間在后一個數據類型是霎時間在前,日期在后。在MicrosoftSQLServer中,日期和時間數據類型包括Datetime和Smalldatetime兩種類型時,所存儲的日期范圍是從1753年1月1日開始,到9999年12月31日結束(每一個值要求8個存儲字節)。使用Smalldatetime數據類型時,所存儲的日期范圍是1900年1月1日開始,到2079年12月31日結束(每一個值要求4個存儲字節)。
日期的格式可以設定。設置日期格式的命令如下:
SetDateFormat{format|@format_var|
其中,format|@format_var是日期的順序。有效的參數包括MDY、DMY、YMD、YDM、MYD和DYM。在默認情況下,日期格式為MDY。
例如,當執行SetDateFormatYMD之后,日期的格式為年月日形式;當執行SetDateFormatDMY之后,日期的格式為日月有年形式
(5)數字數據類型
數字數據只包含數字。數字數據類型包括正數和負數、小數(浮點數)和整數
整數由正整數和負整數組成,例如39、25、0-2和33967。在MicrsoftSQLServer中,整數存儲的數據類型是 Int,Smallint和Tinyint。Int數據類型存儲數據的范圍大于Smallint數據類型存儲數據的范圍,而Smallint據類型存儲數據的范圍大于Tinyint數據類型存儲數據的范圍。使用Int數據狗昔存儲數據的范圍是從-2147483648到2147483647(每一個值要求4個字節存儲空間)。使用Smallint數據類型時,存儲數據的范圍從-32768到32767(每一個值要求2個字節存儲空間)。使用Tinyint數據類型時,存儲數據的范圍是從0到255(每一個值要求1個字節存儲空間)。
精確小婁數據在SQLServer中的數據類型是Decimal和Numeric。這種數據所占的存儲空間根據該數據的位數后的位數來確定。
在SQLServer中,近似小數數據的數據類型是Float和Real。例如,三分之一這個分數記作。3333333,當使用近似數據類型時能準確表示。因此,從系統中檢索到的數據可能與存儲在該列中數據不完全一樣。
(6)貨幣數據表示正的或者負的貨幣數量。
在MicrosoftSQLServer中,貨幣數據的數據類型是Money和Smallmoney
Money數據類型要求8個存儲字節,Smallmoney數據類型要求4個存儲字節。
(7)特殊數據類型
特殊數據類型包括前面沒有提過的數據類型。特殊的數據類型有3種,即 Timestamp、Bit和Uniqueidentifier。
Timestamp用于表示SQLServer活動的先后順序,以二進投影的格式表示。Timestamp數據與插入數據或者日期和時間沒有關系。
Bit由1或者0組成。當表示真或者假、ON或者OFF時,使用Bit數據類型。例如,詢問是否是每一次訪問的客戶機請求可以存儲在這種數據類型的列中。
Uniqueidentifier由16字節的十六進制數字組成,表示一個全局唯一的。當表的記錄行要求唯一時,GUID是非常有用。例如,在客戶標識號列使用這種數據類型可以區別不同的客戶。
2.用戶定義的數據類型
用戶定義的數據類型基于在MicrosoftSQLServer中提供的數據類型。當幾個表中必須存儲同一種數據類型時,并且為保證這些列有相同的數據類型、長度和可空性時,可以使用用戶定義的數據類型。例如,可定義一種稱為 postal_co
當創建用戶定義的數據類型時,必須提供三個數:數據類型的名稱、所基于的系統數據類型和數據類型的可空性。
(1)創建用戶定義的數據類型
創建用戶定義的數據類型可以使用Transact-SQL語句。系統存儲過程sp_addtype可以來創建用戶定義的數據類型。其語法形式如下:
sp_addtype{type},[,system_da
其中,type是用戶定義的數據類型的名稱。system_da
例子:
Usecust
Execsp_addtypessn,'Varchar(11)',"NotNull'
創建一個用戶定義的數據類型ssn,其基于的系統數據類型是變長為11的字符,不允許空。
例子:
Usecust
Execsp_addtypebirthday,datetime,'Null'
創建一個用戶定義的數據類型birthday,其基于的系統數據類型是DateTime,允許空。
例子:
Usemaster
Execsp_addtypetelephone,'varchar(24),'NotNull'
Eexcsp_addtypefax,'varchar(24)','Null'
創建兩個數據類型,即telephone和fax
(2)刪除用戶定義的數據類型
當用戶定義的數據類型不需要時,可刪除。刪除用戶定義的數據類型的命令是sp_droptype{'type'}。
例子:
Usemaster
Execsp_droptype'ssn'
注意:當表中的列還正在使用用戶定義的數據類型時,或者在其上面還綁定有默認或者規則時,這種用戶定義的數據類型不能刪除。
SQLSERVER的字段類型說明
以下為SQL SERVER7.0以上版本的字段類型說明。SQL SERVER6.5的字段類型說明請參考SQL SERVER提供的說明。
字段類型 |
描述 |
bit | 0或1的整型數字 |
int | 從-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型數字 |
smallint | 從-2^15(-32,768)到2^15(32,767)的整型數字 |
tinyint | 從0到255的整型數字 |
decimal | 從-10^38到10^38-1的定精度與有效位數的數字 |
numeric | decimal的同義詞 |
money | 從-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的貨幣數據,最小貨幣單位千分之十 |
smallmoney | 從-214,748.3648到214,748.3647的貨幣數據,最小貨幣單位千分之十 |
float | 從-1.79E+308到1.79E+308可變精度的數字 |
real | 從-3.04E+38到3.04E+38可變精度的數字 |
datetime | 從1753年1月1日到9999年12日31的日期和時間數據,最小時間單位為百分之三秒或3.33毫秒 |
smalldatetime | 從1900年1月1日到2079年6月6日的日期和時間數據,最小時間單位為分鐘 |
timestamp | 時間戳,一個數據庫寬度的唯一數字 |
uniqueidentifier | 全球唯一標識符GUID |
char | 定長非Unicode的字符型數據,最大長度為8000 |
varchar | 變長非Unicode的字符型數據,最大長度為8000 |
text | 變長非Unicode的字符型數據,最大長度為2^31-1(2G) |
nchar | 定長Unicode的字符型數據,最大長度為8000 |
nvarchar | 變長Unicode的字符型數據,最大長度為8000 |
ntext | 變長Unicode的字符型數據,最大長度為2^31-1(2G) |
binary | 定長二進制數據,最大長度為8000 |
varbinary | 變長二進制數據,最大長度為8000 |
image | 變長二進制數據,最大長度為2^31-1(2G) |