SQL數據類型

SQL數據類型

Microsoft Jet 資料庫引擎 SQL 數據類型 由13個基本數據類型組成,它們是由 Microsoft Jet 資料庫引擎和幾個驗證過的有效同義字定義的。常見的有:整形,單精度,雙精度,可變長度字元,固定長度字元,長型,日期等等。

基本介紹

  • 中文名:SQL數據類型
  • 外文名:Microsoft Jet 
  • 數據類型:BINARY
  • 常見的有:整形
  • 語言默認:·Char [(n)]
  • 數據類型組成:13個基本
數據類型,語言默認,用戶自建,細節區分,char(n),nchar(n),

數據類型

下面的表格列出了主要數據類型。這些同義字在 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 的保留字

語言默認

數據類型是數據的一種屬性,表示數據所表示信息的類型。任何一種計算機語言都定義了自己的數據類型。當然,不同的程式語言都具有不同的特點,所定義的數據類型的種類和名稱都或多或少有些不同。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、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。在 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是非常有用。例如,在客戶標識號列使用這種數據類型可以區別不同的客戶。

用戶自建

用戶定義的數據類型基於在 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'
注意:當表中的列還正在使用用戶定義的數據類型時,或者在其上面還綁定有默認或者規則時,這種用戶定義的數據類型不能刪除。

細節區分

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中,varchar和nvarchar如何選擇?
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。

相關詞條

熱門詞條

聯絡我們