資料類型是資料的一種屬性,表示資料所表示資訊的類型。任何一種電腦語言都定義了自己的資料類型。當然,不同的程式語言都具有不同的特點,所定義的資料類型的各類和名稱都或多或少有些不同。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_code的資料類型,它基於Char資料類型。 當建立使用者定義的資料類型時,必須提供三個數:資料類型的名稱、所基於的系統資料類型和資料類型的可空性。 (1)建立使用者定義的資料類型 建立使用者定義的資料類型可以使用Transact-SQL語句。系統預存程序sp_addtype可以來建立使用者定義的資料類型。其文法形式如下:sp_addtype{type},[,system_data_bype][,'null_type'] 其中,type是使用者定義的資料類型的名稱。system_data_type是系統提供的資料類型,例如Decimal、Int、Char等等。null_type表示該資料類型是如何處理空值的,必須使用單引號引起來,例如'NULL'、'NOTNULL'或者'NONULL'。 例子: 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) |
|