SQL數據類型詳解
(1)二進製數據類型
二進製數據包括 Binary、Varbinary 和 ImageBinary 數據類型既可以是固定長度的(Binary),也可以是變長度的。
Binary[(n)] 是 n 位固定的二進製數據。其中,n 的取值範圍是從 1 到 8000。其存儲窨的大小是 n + 4 個字節。
Varbinary[(n)] 是 n 位變長度的二進製數據。其中,n 的取值範圍是從 1 到 8000。其存儲窨的大小是 n + 4個字節,不是n 個字節。
在 Image 數據類型中存儲的數據是以位字符串存儲的,不是由 SQL Server 解釋的,必須由應用程序來解釋。例如,應用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把數據存儲在 Image 數據類型中。
(2)字符數據類型
字符數據的類型包括 Char,Varchar 和 Text字符數據是由任何字母、符號和數字任意組合而成的數據。
Varchar 是變長字符數據,其長度不超過 8KB。Char 是定長字符數據,其長度最多為 8KB。超過 8KB 的ASCII 數據可以使用Text數據類型存儲。例如,因為 Html 文檔全部都是 ASCII 字符,並且在一般情況下長度超過 8KB,所以這些文檔可以 Text 數據類型存儲在SQL Server 中。
(3)Unicode 數據類型
Unicode 數據類型包括 Nchar,Nvarchar 和Ntext在 Microsoft SQL Server 中,傳統的非 Unicode 數據類型允許使用由特定字符集定義的字符。在 SQL Server安裝過程中,允許選擇一種字符集。使用 Unicode 數據類型,列中可以存儲任何由Unicode 標準定義的字符。在 Unicode 標準中,包括了以各種字符集定義的全部字符。使用Unicode數據類型,所戰勝的窨是使用非 Unicode 數據類型所占用的窨大小的兩倍。
在 SQL Server 中,Unicode 數據以 Nchar、Nvarchar 和 Ntext 數據類型存儲。使用這種字符類型存儲的列可以存儲多個字符集中的字符。當列的長度變化時,應該使用Nvarchar 字符類型,這時最多可以存儲 4000 個字符。當列的長度固定不變時,應該使用 Nchar 字符類型,同樣,這時最多可以存儲4000 個字符。當使用 Ntext 數據類型時,該列可以存儲多於 4000 個字符。
(4)日期和時間數據類型
日期和時間數據類型包括 Datetime 和 Smalldatetime兩種類型日期和時間數據類型由有效的日期和時間組成。例如,有效的日期和時間數據包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一個數據類型是日期在前,時間在後一個數據類型是霎時間在前,日期在後。在 Microsoft SQL Server中,日期和時間數據類型包括Datetime 和 Smalldatetime 兩種類型時,所存儲的日期範圍是從 1753 年 1 月 1 日開始,到9999 年12 月 31 日結束(每一個值要求 8 個存儲字節)。使用 Smalldatetime 數據類型時,所存儲的日期範圍是 1900年 1 月 1日 開始,到 2079 年 12 月 31 日結束(每一個值要求 4 個存儲字節)。
日期的格式可以設定。設置日期格式的命令如下:
Set DateFormat {format | @format _var|
其中,format | @format_var 是日期的順序。有效的參數包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默認情況下,日期格式為MDY。
例如,當執行 Set DateFormat YMD 之後,日期的格式為年 月 日 形式;當執行 Set DateFormat DMY 之後,日期的格式為日 月有年 形式
(5)數字數據類型
數字數據隻包含數字。數字數據類型包括正數和負數、小數(浮點數)和整數整數由正整數和負整數組成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整數存儲的數據類型是 Int,Smallint和 Tinyint。Int 數據類型存儲數據的範圍大於 Smallint 數據類型存儲數據的範圍,而 Smallint 據類型存儲數據的範圍大於Tinyint 數據類型存儲數據的範圍。使用 Int 數據狗昔存儲數據的範圍是從 -2 147 483 648 到 2 147 483 647(每一個值要求4個字節存儲空間)。使用 Smallint 數據類型時,存儲數據的範圍從 -32 768 到 32 767(每一個值要求2個字節存儲空間)。使用Tinyint 數據類型時,存儲數據的範圍是從0 到255(每一個值要求1個字節存儲空間)。
精確小婁數據在 SQL Server 中的數據類型是 Decimal 和 Numeric。這種數據所占的存儲空間根據該數據的位數後的位數來確定。
在SQL Server 中,近似小數數據的數據類型是 Float 和 Real。例如,三分之一這個分數記作。3333333,當使用近似數據類型時能準確表示。因此,從係統中檢索到的數據可能與存儲在該列中數據不完全一樣。
(6)貨幣數據表示正的或者負的貨幣數量 。
在 Microsoft SQL Server 中,貨幣數據的數據類型是Money 和 SmallmoneyMoney數據類型要求 8 個存儲字節,Smallmoney 數據類型要求 4 個存儲字節。
(7)特殊數據類型
特殊數據類型包括前麵沒有提過的數據類型。特殊的數據類型有3種,即 Timestamp、Bit 和 Uniqueidentifier。Timestamp 用於表示SQL Server 活動的先後順序,以二進投影的格式表示。Timestamp 數據與插入數據或者日期和時間沒有關係。
Bit 由 1 或者 0 組成。當表示真或者假、ON 或者 OFF 時,使用 Bit 數據類型。例如,詢問是否是每一次訪問的客戶機請求可以存儲在這種數據類型的列中。
Uniqueidentifier 由 16 字節的十六進製數字組成,表示一個全局唯一的。當表的記錄行要求唯一時,GUID是非常有用。例如,在客戶標識號列使用這種數據類型可以區別不同的客戶。
2.用戶定義的數據類型
用戶定義的數據類型基於在 Microsoft SQL Server 中提供的數據類型。當幾個表中必須存儲同一種數據類型時,並且為保證這些列有相同的數據類型、長度和可空性時,可以使用用戶定義的數據類型。例如,可定義一種稱為 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'、'NOT NULL'或者'NONULL'。
例子:
Use cust
Exec sp_addtype ssn,'Varchar(11)',"Not Null'
創建一個用戶定義的數據類型 ssn,其基於的係統數據類型是變長為11 的字符,不允許空。
例子:
Use cust
Exec sp_addtype birthday,datetime,'Null'
創建一個用戶定義的數據類型 birthday,其基於的係統數據類型是 DateTime,允許空。
例子:
Use master
Exec sp_addtype telephone,'varchar(24),'Not Null'
Eexc sp_addtype fax,'varchar(24)','Null'
創建兩個數據類型,即 telephone 和 fax
(2)刪除用戶定義的數據類型
當用戶定義的數據類型不需要時,可刪除。刪除用戶定義的數據類型的命令是 sp_droptype {'type'}。
例子:
Use master
Exec sp_droptype 'ssn'
注意:當表中的列還正在使用用戶定義的數據類型時,或者在其上麵還綁定有默認或者規則時,這種用戶定義的數據類型不能刪除。
SQL SERVER的字段類型說明
以下為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) |
轉載自:https://www.cnblogs.com/linckle/archive/2006/01/12/316010.html
最後更新:2017-04-02 04:01:44