複製鏈接
請複製以下鏈接發送給好友

SQL數據類型

鎖定
Microsoft Jet 數據庫引擎 SQL 數據類型 由13個基本數據類型組成,它們是由 Microsoft Jet 數據庫引擎和幾個驗證過的有效同義字定義的。常見的有:整形,單精度雙精度,可變長度字符,固定長度字符,長型,日期等等。
中文名
SQL數據類型
外文名
Microsoft Jet
數據類型
BINARY
常見的有
整形
語言默認
·Char [(n)]
數據類型組成
13個基本

SQL數據類型數據類型

下面的表格列出了主要數據類型。這些同義字在 Microsoft Jet數據庫引擎SQL 保留字中被識別。
數據類型 存儲大小 説明
BINARY 每個字符佔一個字節 任何類型的數據都可存儲在這種類型的字段中。不需數據轉換(例如,轉換到文本數據)。數據輸入二進制字段的方式決定了它的輸出方式
BIT 1 個字節0 和 1 ,以及只包含這兩個數值之一的字段。
TINYINT 1 個字節 介於 0 到 255 之間的整型數。
MONEY 8 個字節 介於 – 922,337,203,685,477.5808 到 922,337,203,685,477.5807 之間的符號整數。
DATETIME
(請參閲 DOUBLE ) 8 個字節 介於 100 到 9999 年的日期或時間數值。
UNIQUEIDENTIFIER 128 個位 用於遠程過程調用的唯一識別數字。
REAL 4 個字節單精度浮點數,負數範圍是從 –3.402823E38 到 –1.401298E-45,正數從1.401298E-45 到 3.402823E38,和 0。
SMALLINT 2 個字節 介於 –32,768 到 32,767 的短整型數。
INTEGER 4 個字節介於 –2,147,483,648 到 2,147,483,647 的長整型數。
DECIMAL 17 個字節容納從 1028 - 1到 - 1028 - 1. 的值的精確的數字數據類型。你可以定義精度 (1 - 28) 和 符號 (0 - 定義精度)。缺省精度和符號分別是18和0。
TEXT 每一字符兩字節(參見注意) 從零到最大 2.14 千兆字節。
IMAGE 視實際需要而定 從零到最大 2.14 千兆字節。用於 OLE 對象。
CHARACTER 每一字符兩字節(參見注意) 長度從 0 到 255 個字符。
注意
可以用ALTER TABLE 語句修正基數和增量。剛插進表中的行會有自動為基於新種值和增量值的列生成的值。如果新種和增長的值和以前的種值及增量匹配,就會造成複製。如果這個列是主鍵,複製值生成時可能導致錯誤。
定義成TEXT也稱作MEMO或CHAR(也稱作有具體長度的 TEXT(n))的字段中的字符被儲存在 Unicode 表示格式。Unicode字符一律需要兩個字節存儲每一字符。對於現有的主要包含字符數據的 Microsoft Jet數據庫,這可能意味着數據庫文件被轉換成 Microsoft Jet 4.0格式時字長會增加將近一倍。然而,從前由單字節字符羣(SBCS)指示的眾多字符羣的Unicode 表示可以很容易地被壓縮成一個單字節。有關的詳細信息,參見CREATE TABLE。如果用COMPRESSION屬性定義CHAR列,數據存儲時會自動被壓縮,提取時解壓縮。
請參閲
等效的 ANSI SQL 數據類型 Microsoft Jet 數據庫引擎 SQL 的保留字

SQL數據類型語言默認

數據類型是數據的一種屬性,表示數據所表示信息的類型。任何一種計算機語言都定義了自己的數據類型。當然,不同的程序語言都具有不同的特點,所定義的數據類型的種類和名稱都或多或少有些不同。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 數據類型中存儲的數據是以位字符串存儲的,不是由 SQL Server 解釋的,必須由應用程序來解釋。例如,應用程序可以使用BMP、TIEF、GIFJPEG 格式把數據存儲在 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。在 Microsoft 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。這種數據所佔的存儲空間根據該數據的位數後的位數來確定。Decimal 數據類型使用128位來表示值來用作數值計算
在SQL Server 中,近似小數數據的數據類型是 Float 和 Real。例如,三分之一這個分數記作0.333333,當使用近似數據類型時能準確表示。因此,從系統中檢索到的數據可能與存儲在該列中數據不完全一樣。
(6)貨幣數據類型
在 Microsoft SQL Server 中,貨幣數據的數據類型是Money 和 Smallmoney
Money數據類型要求 8 個存儲字節,Smallmoney 數據類型要求 4 個存儲字節。
(7)特殊數據類型
特殊數據類型包括前面沒有提過的數據類型。特殊的數據類型有3種,即 Timestamp、Bit 和 Uniqueidentifier。
Timestamp 用於表示SQL Server 活動的先後順序,以二進投影的格式表示。Timestamp 數據與插入數據或者日期和時間沒有關係。Timestamp 類型的字段是一個基於系統時鐘在數據行被創建或修改時由SQL Server自動填充的值。
Bit 由 1 或者 0 組成。當表示真或者假、ON 或者 OFF 時,使用 Bit 數據類型。例如,詢問是否是每一次訪問的客户機請求可以存儲在這種數據類型的列中。
Uniqueidentifier 由 16字節的十六進制數字組成,表示一個全局唯一的。當表的記錄行要求唯一時,GUID是非常有用。例如,在客户標識號列使用這種數據類型可以區別不同的客户。

SQL數據類型用户自建

用户定義的數據類型基於在 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數據類型細節區分

char(n)
固定長度為 n 個字節的且非 Unicode 的字符數據。n 必須是一個介於 1 和 8,000 之間的數值。存儲大小為 n 個字節(如char(6),當字段為qqq時,數據庫實際佔用空間為也要6個字節,而不是3個字節,但只允許存儲6個字節,一般中文佔兩個字節)。
nchar(n)
包含 n 個字符的固定長度 Unicode 字符數據。n 的值必須介於 1 與 4,000 之間。字節的存儲大小是定義字符個數(n)的兩倍。
SQL Server中,varcharnvarchar如何選擇?
varchar在SQL Server中是採用單字節來存儲數據的,nvarchar是使用Unico來存儲數據的.中文字符存儲到SQL Server中會保存為兩個字節(一般採用Unico編碼),英文字符保存到數據庫中,如果字段的類型為varchar,則只會佔用一個字節,而如果字段的類型為nvarchar,則會佔用兩個字節。
正常情況下,我們使用varchar也可以存儲中文字符,但是如果遇到操作系統是英文操作系統並且對中文字體的支持不全面時,在SQL Server存儲中文字符為varchar就會出現亂碼(顯示為??)。而且正常情況下,主機都會支持中文的環境,所以如果使用varchar來存儲數據,在開發階段是發現不了的。多數情況下,在部署的時候也不會有問題.
但是!如果部署的主機是英文操作系統,並且不支持中文環境,那問題就出來了。所有的varchar字段在存儲中文的時候都會變成亂碼(顯示為??)。而且一般情況下你不會知道這是因為你採用了錯誤的數據類型來存儲所造成的,你會試着去裝中文字體,試着去設置操作系統的語言環境...這些都不能解決問題,唯一能解決問題的是把數據庫字段的類型個性為nvarchar(或者nchar)。對項目管理比較熟悉的朋友應該都知道,到部署階段再來修改數據庫是一個很恐怖的事情。
使用nvarchar的另一個非常好處就是在判斷字符串的時候可以不需要考慮中英文兩種字符的差別。
當然,使用nvarchar存儲英文字符會增大一倍的存儲空間。但是在存儲代價已經很低廉的情況下,優先考慮兼容性會給你帶來更多好處的。
所以在Design的時候應該儘量使用nvarchar來存儲數據。只有在你確保該字段不會保存中文的時候,才採用varchar來存儲。
1、CHAR。CHAR存儲定長數據很方便,CHAR字段上的索引效率級高,比如定義char(10),那麼不論你存儲的數據是否達到了10個字節,都要佔去10個字節的空間。
2、VARCHAR。存儲變長數據,但存儲效率沒有CHAR高。如果一個字段可能的值是不固定長度的,我們只知道它不可能超過10個字符,把它定義為 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。
3、TEXT。text存儲可變長度的非Unicode數據,最大長度為2^31-1(2,147,483,647)個字符。
4、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。