在 SQL Server 中,每一個列、局部變量、表達式和參數都具備一個相關的數據類型。 數據類型是一種屬性,用於指定對象可保存的數據的類型:整數數據、字符數據、貨幣數據、日期和時間數據、二進制字符串等。sql
SQL Server 提供系統數據類型集,該類型集定義了可與 SQL Server 一塊兒使用的全部數據類型。 您還可使用 Transact-SQL 或 Microsoft .NET Framework 定義本身的數據類型。 別名數據類型基於系統提供的數據類型。數據庫
數據類型分默認和自定義兩種。服務器
SQL 數據類型 由13個基本數據類型組成,它們是由 Microsoft Jet 數據庫引擎和幾個驗證過的有效同義字定義的。常見的有:×××,單精度,雙精度,可變長度字符,固定長度字符,長型,日期等等。ide
====================================================================函數
(一)精確數字字體
int 數據類型是 SQL Server 中的主要整數數據類型。 bigint 數據類型用於整數值可能超過 int 數據類型支持範圍的狀況。優化
在數據類型優先次序表中,bigint 介於 smallmoney 和 int 之間。編碼
僅當參數表達式爲 bigint 數據類型時,函數才返回 bigint。 SQL Server 不會自動將其餘整數數據類型(tinyint、smallint 和 int)提高到 bigint。 spa
decimal [ (p[ ,s] )] 和 numeric[ (p[ ,s] )]操作系統
固定精度和小數位數。 使用最大精度時,有效值的範圍爲 - 10^38 +1 到 10^38 - 1。 decimal 的 ISO 同義詞爲 dec 和 dec(p、s)。 numeric 在功能上等價於 decimal。
bit
能夠取值爲 一、0 或 NULL 的 integer 數據類型。
SQL Server 數據庫引擎可優化 bit 列的存儲。 若是表中的列爲 8 bit 或更少,則這些列做爲 1 個字節存儲。 若是列爲 9 到 16 bit,則這些列做爲 2 個字節存儲,以此類推。
字符串值 TRUE 和 FALSE 可轉換爲 bit 值:TRUE 將轉換爲 1,FALSE 將轉換爲 0。
轉換爲 bit 會將任何非零值升爲 1。
money 和 smallmoney 數據類型精確到它們所表明的貨幣單位的萬分之一。
用句點分隔局部貨幣單位(如美分)和整體貨幣單位。 例如,2.15 表示 2 美圓 15 美分。
這些數據類型可使用下列任意一種貨幣符號。
===========================================================================
(二)近似數字
float & real
用於表示浮點數值數據的大體數值數據類型。 浮點數據爲近似值;所以,並不是數據類型範圍內的全部值都能精確地表示。 real 的 ISO 同義詞爲 float(24)。
SQL Server 將 n 視爲下列兩個可能值之一。 若是 1<=n<=24,則將 n 視爲 24。 若是 25<=n<=53,則將 n 視爲 53。
SQL Server float[(n)] 數據類型從 1 到 53 之間的全部 n 值均符合 ISO 標準。 double precision 的同義詞爲 float(53)。
使用科學記數法將 float 值轉換爲 decimal 或 numeric 被限制爲僅限 17 位精度的值。 精度高於 17 的任何值都將舍入爲零。
參考:http://msdn.microsoft.com/zh-cn/library/ms173773.aspx
===========================================================================
(三)日期和時間
date的用法以下表
[m]m、dd 和 [yy]yy 在字符串中表示月、日和年,使用斜線 (/)、連字符 (-) 或句點 (.) 做爲分隔符。
僅支持四位或兩位數字表示的年份。 請儘量使用以四位數字表示的年份。 若要指定一個位於 0001 到 9999 之間的整數來表示用於將兩位數年份解釋爲四位數年份的截止年份,請使用配置兩位數年份截止服務器配置選項。
一個比截止年份的後兩位數字小或者與其相等的兩位數年份與該截止年份處於同一個世紀。 而一個比截止年份的後兩位數字大的兩位數年份所處的世紀爲該截止年份所處世紀的上一個世紀。 例如,若是「兩位數年份截止」爲默認值 2049,則兩位數年份 49 被解釋爲 2049 年,而兩位數年份 50 被解釋爲 1950 年。
默認日期格式由當前語言設置決定。 能夠經過使用 SET LANGUAGE 和 SET DATEFORMAT 語句更改日期格式。
date 不支持 ydm 格式。
mon 表示採用當前語言的完整月份名稱或月份縮寫。 逗號是可選的,且忽略大小寫。
爲避免不肯定性,請使用四位數年份。
若是沒有指定日,則默認爲當月第一天。
詳細介紹:http://msdn.microsoft.com/zh-cn/library/bb630352.aspx
對於新的工做,請使用 time、date、datetime2 和 datetimeoffset 數據類型。 這些類型符合 SQL 標準。 它們更易於移植。 time 、datetime2 和 datetimeoffset 提供更高精度的秒數。 datetimeoffset 爲全局部署的應用程序提供時區支持。
datetime2:可將 datetime2 視做現有 datetime 類型的擴展,其數據範圍更大,默認的小數精度更高,並具備可選的用戶定義的精度。
datetimeoffset:用於定義一個與採用 24 小時制並可識別時區的一日內時間相組合的日期。
smalldatetime:定義結合了一天中的時間的日期。 此時間爲 24 小時制,秒始終爲零 (:00),而且不帶秒小數部分。
time:定義一天中的某個時間。 此時間不能感知時區且基於 24 小時制。
===================================================================================
(四)字符串
char [ ( n ) ]
固定長度,非 Unicode 字符串數據。 n 用於定義字符串長度,而且它必須爲 1 到 8,000 之間的值。 存儲大小爲 n 字節。 char 的 ISO 同義詞爲 character。
varchar [ ( n | max ) ]
可變長度,非 Unicode 字符串數據。 n 用於定義字符串長度,而且它能夠爲 1 到 8,000 之間的值。 max 指示最大存儲大小是 2^31-1 個字節 (2 GB)。 存儲大小爲所輸入數據的實際長度 + 2 個字節。 varchar 的 ISO 同義詞爲 char varying 或 character varying。
text
服務器代碼頁中長度可變的非 Unicode 數據,字符串最大長度爲 2^31-1 (2,147,483,647) 個字節。 當服務器代碼頁使用雙字節字符時,存儲還是 2,147,483,647 字節。 根據字符串,存儲大小可能小於 2,147,483,647 字節。
在 Microsoft SQL Server 的將來版本中將刪除 ntext、text 和 p_w_picpath 數據類型。 請避免在新開發工做中使用這些數據類型,並考慮修改當前已使用這些數據類型的應用程序。 請改用 nvarchar(max)、varchar(max) 和 varbinary(max)。
===================================================================================
(五)Unicode 字符串
nchar [ ( n ) ]
固定長度的 Unicode 字符串數據。 n 用於定義字符串長度,而且它必須爲 1 到 4,000 之間的值。 存儲大小爲 n 字節的兩倍。 當排序規則代碼頁使用雙字節字符時,存儲大小仍然爲 n 個字節。 根據字符串的不一樣,n 個字節的存儲大小可能小於爲 n 指定的值。 nchar 的 ISO 同義詞爲 national char 和 national character。
nvarchar [ ( n | max ) ]
可變長度的 Unicode 字符串數據。 n 用於定義字符串長度,而且它能夠爲 1 到 4,000 之間的值。 max 指示最大存儲大小是 2^31-1 個字節 (2 GB)。 存儲大小(以字節爲單位)是所輸入數據實際長度的兩倍 + 2 個字節。 nvarchar 的 ISO 同義詞爲 national char varying 和 national character varying。
ntext
長度可變的 Unicode 數據,字符串最大長度爲 2^30 - 1 (1,073,741,823) 個字節。 存儲大小是所輸入字符串長度的兩倍(以字節爲單位)。 ntext 的 ISO 同義詞爲 national text。
===================================================================================
(六)二進制字符串
binary [ ( n ) ]
長度爲 n 字節的固定長度二進制數據,其中 n 是從 1 到 8,000 的值。 存儲大小爲 n 字節。
varbinary [ ( n | max) ]
可變長度二進制數據。 n 的取值範圍爲 1 至 8,000。 max 指示最大存儲大小是 2^31-1 個字節。 存儲大小爲所輸入數據的實際長度 + 2 個字節。 所輸入數據的長度能夠是 0 字節。 varbinary 的 ANSI SQL 同義詞爲 binary varying。
p_w_picpath
長度可變的二進制數據,從 0 到 2^31-1 (2,147,483,647) 個字節。
===================================================================================
(七)其餘數據類型
cursor:這是變量或存儲過程 OUTPUT 參數的一種數據類型,這些參數包含對遊標的引用。
timestamp:timestamp 的數據類型爲 rowversion 數據類型的同義詞,並具備數據類型同義詞的行爲。 在 DDL 語句,請儘可能使用 rowversion 而不是 timestamp。rowversion 一般用做給錶行加版本戳的機制。 存儲大小爲 8 個字節。 rowversion 數據類型只是遞增的數字,不保留日期或時間。 若要記錄日期或時間,請使用 datetime2 數據類型。
hierarchyid:hierarchyid 數據類型是一種長度可變的系統數據類型。 可以使用 hierarchyid 表示層次結構中的位置。 類型爲 hierarchyid 的列不會自動錶示樹。 由應用程序來生成和分配 hierarchyid 值,使行與行之間的所需關係反映在這些值中。
uniqueidentifier:uniqueidentifier 數據類型的列或局部變量可經過如下方式初始化爲一個值:使用 NEWID 函數。經過從 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 形式的字符串常量進行轉換,其中,每一個 x 都是 0-9 或 a-f 範圍內的十六進制數字。 例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 爲有效的 uniqueidentifier 值。
sql_variant:一種數據類型,用於存儲 SQL Server 支持的各類數據類型的值。
xml:存儲 XML 數據的數據類型。 能夠在列中或者 xml 類型的變量中存儲 xml 實例。
table:一種特殊的數據類型,可用於存儲結果集以進行後續處理。 table 主要用於臨時存儲一組做爲表值函數的結果集返回的行。 可將函數和變量聲明爲 table 類型。 table 變量可用於函數、存儲過程和批處理中。 若要聲明 table 類型的變量,請使用 DECLARE @local_variable。
空間類型
===================================================================================
SQL Server中,varchar和nvarchar如何選擇?
varchar在SQL Server中是採用單字節來存儲數據的,nvarchar是使用Unico來存儲數據的.中文字符存儲到SQL Server中會保存爲兩個字節(通常採用Unico編碼),英文字符保存到數據庫中,若是字段的類型爲varchar,則只會佔用一個字節,而若是字段的類型爲nvarchar,則會佔用兩個字節。
正常狀況下,咱們使用varchar也能夠存儲中文字符,可是若是遇到操做系統是英文操做系統而且對中文字體的支持不全面時,在SQL Server存儲中文字符爲varchar就會出現亂碼(顯示爲??)。並且正常狀況下,主機都會支持中文的環境,因此若是使用varchar來存儲數據,在開發階段是發現不了的。多數狀況下,在部署的時候也不會有問題.
因此在Design的時候應該儘可能使用nvarchar來存儲數據。只有在你確保該字段不會保存中文的時候,才採用varchar來存儲。
一、CHAR。CHAR存儲定長數據很方便,CHAR字段上的索引效率級高,好比定義char(10),那麼不論你存儲的數據是否達到了10個字節,都要佔去10個字節的空間。
二、VARCHAR。存儲變長數據,但存儲效率沒有CHAR高。若是一個字段可能的值是不固定長度的,咱們只知道它不可能超過10個字符,把它定義爲 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際狀況找到權衡點。
三、TEXT。text存儲可變長度的非Unicode數據,最大長度爲2^31-1(2,147,483,647)個字符。
四、NCHAR、NVARCHAR、NTEXT。這三種從名字上看比前面三種多了個「N」。它表示存儲的是Unicode數據類型的字符。咱們知道字符中,英文字符只須要一個字節存儲就足夠了,但漢字衆多,須要兩個字節存儲,英文與漢字同時存在時容易形成混亂,Unicode字符集就是爲了解決字符集這種不兼容的問題而產生的,它全部的字符都用兩個字節表示,即英文字符也是用兩個字節表示。nchar、nvarchar的長度是在1到4000之間。和char、varchar比較起來,nchar、nvarchar則最多存儲4000個字符,不管是英文仍是漢字;而char、varchar最多能存儲8000個英文,4000個漢字。能夠看出使用nchar、nvarchar數據類型時不用擔憂輸入的字符是英文仍是漢字,較爲方便,但在存儲英文時數量上有些損失。
因此通常來講,若是含有中文字符,用nchar/nvarchar,若是純英文和數字,用char/varchar。
參考地址:http://baike.baidu.com/view/1255757.htm?fr=aladdin
============================================================================